内部クラスから継承するクラスを初期化する方法は? 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。非静的クラス定義を取得するインスタンスがありません