2009-10-09 7 views
32

私は比較的Javaに新しいので、私は新しいAPIを使用しています。私は、このメソッドのオーバーライドに出くわしたと私はこれが呼び出されたかわからないんだけど:私が理解からJavaで呼び出されるこのタイプのメソッドオーバーライドは何ですか?

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

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

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

ありがとうございました。

+3

大きな質問...リファレンスで参照するのは非常に難しいことです。 +1ありがたいことに、私は同じQを尋ねようとしたので、私のQを見つけました。 – LarsH

答えて

28

anonymous inner classです。

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

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

特に、Listenerクラスの場合、非常に便利なショートカットになる可能性がありますが、疎遠になり、インラインメソッド定義が長くなりすぎると、コードを実行するのが難しくなります。

12

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

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

+0

ありがとうございます。私は内部のメソッドを検索しましたが、それを内部クラス、それほど匿名の内部クラスとは考えていませんでした。 彼らについて読んでいない私は行く! –

関連する問題