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();
これは、限り、彼らは静的ではないとして、クラス内のすべてのインスタンスメソッドに適用されます。