4

次のコードは期待どおりにコンパイルされます。

class A {
    class B {}
    class C extends B {}
}

しかし、 class Bextends classがある場合A、コンパイル エラーが発生します。

class A {
    class B extends A {}
    class C extends B {}  // <-- Error here
}
いくつかの中間のため、タイプ A の囲んでいるインスタンスは使用できません
コンストラクターの呼び出し。

ここで何が起きてるの?A拡張すると何かが変わるのはなぜですか?

編集:どうやら、これは Java 7 で正常にコンパイルされます。古い Java バージョンでコンパイルされなかった理由と、それを可能にするために Java 7 で何が変更されたかについての説明をいただければ幸いです。


関連項目:

4

2 に答える 2

0

それは再帰です。
B が A を拡張し、A がそれ自体に新しい B を持っている場合、B は A を再び拡張します。

@ZiyaoWei で述べ​​たように、B が の場合、エラーはなくなりますstatic。これは、クラス B が一度しか存在しないためです。

于 2013-06-13T14:14:52.580 に答える