1

外部クラスクラス内にネストされたクラスがあるとします。そのネストされたクラスは、それ自体の中で外部クラスのインスタンスをインスタンス化できますか?

外部クラスがそれ自体の内部クラスのインスタンスをインスタンス化し、それが次に内部クラス内の外部クラスのインスタンスをインスタンス化する場合、これは無限の再帰を引き起こしますか?

4

2 に答える 2

12

以下を意味する場合は、はい、それはにつながりStackOverflowErrorます。

public class Outer {

    public Outer() {
        Inner inner = new Inner();
    }

    private class Inner {
        public Inner() {
            Outer outer = new Outer();
        }
    }

    public static void main(String[] args) {
        Outer outer = new Outer();
    }
}

上記のプリント:

Exception in thread "main" java.lang.StackOverflowError
    at com.adarshr.Outer.<init>(Outer.java:6)
    at com.adarshr.Outer$Inner.<init>(Outer.java:12)
    at com.adarshr.Outer.<init>(Outer.java:7)
    at com.adarshr.Outer$Inner.<init>(Outer.java:12)
    at com.adarshr.Outer.<init>(Outer.java:7)
    at com.adarshr.Outer$Inner.<init>(Outer.java:12)
于 2012-06-01T14:12:30.257 に答える
4

静的な内部クラスがある場合は、そうすることができるはずです。外部クラスは実際には名前空間として機能しているだけです。つまり、外部クラスの既存のインスタンスなしで内部クラスの既存のインスタンスを持つことは合法です。はい。

内部クラスが静的でない場合、それはそれを囲むクラスのコンテキストでのみ存在できます(インスタンス化のみが可能です)。したがって、インナーを作成するには、最初にアウターを作成する必要があります。

于 2012-06-01T14:14:23.283 に答える