外部クラスによって内部クラスを呼び出す方法

Adryr83:

私はあなたが二つの異なるコンストラクタを持って、メンバー内部クラスをインスタンス化することを知っています:

最初:

Outer out = new Outer();
Outer.Inner in = out.new Inner();

第二:

Outer.Inner in = new Outer().new Inner();

今、私はなぜこのコードのコンパイルを知りません。

public class Outer {

    private String greeting="Hi";

    protected class Inner {
        public int repeat=3;

        public void go() {
            for (int i =0; i<repeat; i++) {
                System.out.println(greeting);
            }
        }
    }

    public void callInner() {
        Inner in = new Inner(); //in my opinion the correct constructor is Outer.Inner in = new Inner()
        in.go();
    }

    public static void main(String[] args) {
        Outer out = new Outer();
        out.callInner();

    }
}

なぜそれがコンパイルしていますか?

どうもありがとう!

イーモンScullion:

あなたがインスタンス化されるとInnerの範囲内Outer(インスタンスメソッド内)、明示的にインスタンス化参照する必要はありませんOuter、あなたの例のように、CLASを:

Outer.Inner in = new Outer().new Inner();

それだけで参照することでインスタンス化するために、罰金ですInner

 Inner in = new Inner();

これは、限り、彼らは静的ではないとして、クラス内のすべてのインスタンスメソッドに適用されます。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=221888&siteId=1