4

私はこの行に少し疑問を持っています:

匿名クラスはコンストラクターを定義できません

次に、次の構文で Anonymous クラスも定義できる理由を説明します。

new class-name ( [ argument-list ] ) { class-body }
4

3 に答える 3

9

匿名クラスでコンストラクターを定義していません。スーパークラスからコンストラクターを呼び出しています。

匿名クラスに適切なコンストラクターを追加することはできませんが、同様のことができます。つまり、初期化ブロックです。

public class SuperClass {
   public SuperClass(String parameter) {
       // this is called when anonymous class is created
   }
}

// an anonymous class is created and instantiated here
new SuperClass(parameterForSuperClassConstructor) {
   {
      // this code is executed when object is initialized
      // and can be used to do many same things as a constructors
   }

   private void someMethod() {

   }

}
于 2009-11-18T18:48:59.180 に答える
3

あなたの例は の匿名サブクラスclass-name作成しますが、匿名クラスに固有のコンストラクターを作成することは許可されていません。class-name指定する引数リストは、コンストラクターの引数リストと同じです。

于 2009-11-18T18:50:09.007 に答える
1

これclass-nameは、定義されたコンストラクターで呼び出される抽象クラスが存在することを意味します。サブクラスのコンストラクターで super() を使用するのと同様に、匿名クラスでそのコンストラクターを使用しています。

于 2009-11-18T18:52:36.233 に答える