私はこの行に少し疑問を持っています:
匿名クラスはコンストラクターを定義できません
次に、次の構文で Anonymous クラスも定義できる理由を説明します。
new class-name ( [ argument-list ] ) { class-body }
私はこの行に少し疑問を持っています:
匿名クラスはコンストラクターを定義できません
次に、次の構文で Anonymous クラスも定義できる理由を説明します。
new class-name ( [ argument-list ] ) { class-body }
匿名クラスでコンストラクターを定義していません。スーパークラスからコンストラクターを呼び出しています。
匿名クラスに適切なコンストラクターを追加することはできませんが、同様のことができます。つまり、初期化ブロックです。
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() {
}
}
あなたの例は の匿名サブクラスをclass-name
作成しますが、匿名クラスに固有のコンストラクターを作成することは許可されていません。class-name
指定する引数リストは、コンストラクターの引数リストと同じです。
これclass-name
は、定義されたコンストラクターで呼び出される抽象クラスが存在することを意味します。サブクラスのコンストラクターで super() を使用するのと同様に、匿名クラスでそのコンストラクターを使用しています。