41

私は Java に比較的慣れていないので、新しい API を使用しています。このメソッドのオーバーライドに出くわしましたが、これが何と呼ばれているのかわかりません:

public void exampleMethod() {
    Button loginButton = new Button("login"){
       public void onSubmit(){
          //submit code here
       }
    };
}

私が理解していることから、これは Button クラスの onSubmit メソッドをオーバーライドしています。私はこれまでにこのタイプのオーバーライドに出くわしたことはありません。それの特定の名前はありますか?詳しく読みたいのですが、見つかりません。これまでのすべての検索は、新しいクラスを作成することによる通常のメソッドのオーバーライドにつながります。これは、私がすでによく知っていることです。

誰かが私を正しい方向に向けることができれば幸いです。

ありがとう。

4

3 に答える 3

38

それは匿名の内部クラスです。

private class上記の例では、継承する を作成する代わりにButton、Button のサブクラスを作成し、残りのコードに合わせてオーバーライドされたメソッドの実装を提供します。

この新しいクラスはその場で作成されるため、名前がないため、anonymousです。別のクラス内で定義されているため、匿名の内部クラスです。

これは、特にクラスの場合、非常に便利なショートカットになりListenerますが、夢中になってインライン メソッド定義が長くなりすぎると、コードをたどるのが難しくなる可能性があります。

于 2009-10-09T07:51:45.147 に答える
13

それは匿名の内部クラスです。基本的に、指定されたクラスから派生する新しいクラスを作成し (Buttonこの場合、同じ手法を使用してインターフェイスを実装できます)、適切なメソッドをオーバーライドします。他のメソッドも含めることができますが、それらはそのクラス内でのみ使用できます。

クラスは同じメソッド内の final ローカル変数にアクセスできます。また、インスタンス メソッドを作成している場合は、暗黙的な参照thisもあります (そのため、「メイン」クラスで他のメソッドを呼び出すことができます)。

于 2009-10-09T07:51:00.110 に答える
7

それは匿名の内部クラスです。

詳細:匿名クラス

于 2009-10-09T07:51:17.893 に答える