内部クラスから継承するクラスを初期化する方法は? foo1.this() がコンパイルされないのはなぜですか?
class Foo1 {
class Inner {
}
}
class Foo2 extends Foo1.Inner {
//Foo2(Foo1 foo1) {foo1.this();} //won't compile
Foo2(Foo1 foo1) {foo1.super();}
}
内部クラスから継承するクラスを初期化する方法は? foo1.this() がコンパイルされないのはなぜですか?
class Foo1 {
class Inner {
}
}
class Foo2 extends Foo1.Inner {
//Foo2(Foo1 foo1) {foo1.this();} //won't compile
Foo2(Foo1 foo1) {foo1.super();}
}
内部クラスを静的に宣言する場合は、それを行うことができます。それ以外の場合は、外部クラス Foo1 のインスタンスが必要です。
class Foo1 {
static class Inner {
}
}
しかし、あなたの直接の質問は奇妙に思えます:
foo1.this(); //won't compile
ここで何をしようとしていますか?「this」というメソッドを呼び出すように見えますが、おそらく引数なしのコンストラクターを使用したいと考えていますか? その場合はそのまま使用this()
してください。
私は何をすべきかを理解しているかどうかわかりfoo1.this();
ません。おそらく、 のデフォルトのコンストラクターを呼び出そうとしていますInner
。Inner
は静的クラスではないため、引数のないコンストラクターはありません。そう見えるだけです。Foo1
実際には、親オブジェクトへの参照を含む引数を取るコンストラクターがあります。
ただし、への呼び出しはfoo1.super()
正常に機能します。暗黙の親参照として新しいInner
インスタンスのコンストラクターを呼び出します。foo1
つまり、新しいInner
インスタンスは特定のインスタンスに関連付けられFoo1
ます。
他の人が指摘したように、クラスを静的にすることができます。その場合、インスタンスInner
への暗黙的な参照は含まれません。次に、コンストラクターFoo1
を呼び出すだけです。super();
Foo2
内部クラスを作成しますstatic
。非静的クラス定義を取得するインスタンスがありません