2012-01-18 3 views
4
コードで

、myObjectという新しいオブジェクトが割り当てられたときに、それはいわゆるオンザフライでインスタンスを作成するときにJavaで呼び出されるものは何ですか?

class MyObject { 
    public String doThing() { 
     return "doh"; 
    } 
} 

class MyClass { 
    private myObject = null; 
    public MyClass() { 
     myObject = new MyObject() { 
      public String doThing() { 
       return "huh?"; 
      } 
     }; 
    } 

?私は技術的に「doThing」がMyObjectのメソッドをオーバーライドしているのか、それを再定義するのかを知ろうとしていますが、何を探して答えを見つけるのか分かりません。その場でオブジェクトの新しいインスタンスを作成して実装するときに呼び出されます。

答えて

9

あなたは何を問うということであれば、そうです、あなたはdoThingメソッドをオーバーライドしている、MyObjectのサブクラスである匿名内部クラスを作成しています。

ちなみに、匿名クラスは名前付きクラスに似ています。ドル記号と数字の接尾辞を持つ囲まれたクラスの名前を持つ.classファイルに独自のバイトコードを持っています。

自分で試してみたい場合は、あなたがmyObjectの方法getClass()を使用して、それについての情報を抽出することができ、名前のように、親、実装されたインタフェース、汎用的な引数など

3

でこれらについてのドキュメントをたくさん見つけることができます。

doThing()メソッドは、そのスーパークラスのパブリックメソッドと同じシグネチャを持つため、オーバーライドします。

@Overrideアノテーションをサブクラスのメソッドに追加することをお勧めします。このアノテーションを持つメソッドがメソッドをオーバーライドしない場合、コンパイラはコンパイルエラーを生成します。

1

Javaでは、すべての非最終インスタンスメソッドはオーバーライド(つまり仮想)の対象となります。これは内部クラスにも等しく適用されるため、コードはMyObjectdoThing()メソッドをオーバーライドします。

1

はい、doThing()メソッドはオーバーライドされています。これは、MyObjectの動作を継承し、それを上書きする匿名クラスと同等です。

関連する問題