0

内部クラスから継承するクラスを初期化する方法は? foo1.this() がコンパイルされないのはなぜですか?

class Foo1 {
    class Inner {
    }
}

class Foo2 extends Foo1.Inner {
    //Foo2(Foo1 foo1) {foo1.this();} //won't compile
    Foo2(Foo1 foo1) {foo1.super();}
}
4

3 に答える 3

2

内部クラスを静的に宣言する場合は、それを行うことができます。それ以外の場合は、外部クラス Foo1 のインスタンスが必要です。

class Foo1 {
    static class Inner {
    }
}

しかし、あなたの直接の質問は奇妙に思えます:

foo1.this(); //won't compile

ここで何をしようとしていますか?「this」というメソッドを呼び出すように見えますが、おそらく引数なしのコンストラクターを使用したいと考えていますか? その場合はそのまま使用this()してください。

于 2012-05-14T13:54:41.147 に答える
1

私は何をすべきかを理解しているかどうかわかりfoo1.this();ません。おそらく、 のデフォルトのコンストラクターを呼び出そうとしていますInnerInnerは静的クラスではないため、引数のないコンストラクターはありません。そう見えるだけです。Foo1実際には、親オブジェクトへの参照を含む引数を取るコンストラクターがあります。

ただし、への呼び出しはfoo1.super()正常に機能します。暗黙の親参照として新しいInnerインスタンスのコンストラクターを呼び出します。foo1つまり、新しいInnerインスタンスは特定のインスタンスに関連付けられFoo1ます。

他の人が指摘したように、クラスを静的にすることができます。その場合、インスタンスInnerへの暗黙的な参照は含まれません。次に、コンストラクターFoo1を呼び出すだけです。super();Foo2

于 2012-05-14T14:19:38.977 に答える
0

内部クラスを作成しますstatic。非静的クラス定義を取得するインスタンスがありません

于 2012-05-14T13:53:53.110 に答える