-1
public class Outer2 {
Outer2(){
System.out.println("Calling Outer2 constructor");
System.out.println(this.getClass().getName() + ": Inner class reference is " + this);
System.out.println(Outer2.this + ": Outer class reference is " + Outer2.this);
}
class Inner1 extends Outer2 {
Inner1() {
System.out.println("Calling Inner1 constructor");
System.out.println(this.getClass().getName() + ": Inner class reference is " + this);
System.out.println(Outer2.this + ": Outer class reference is " + Outer2.this);
}
}
class Inner2 extends Inner1 {
Inner2() {
System.out.println("Calling Inner2 constructor");
System.out.println(this.getClass().getName() + ": Inner class reference is " + this);
System.out.println(Outer2.this + ": Outer class reference is " + Outer2.this);
}
}
public static void main(String[] args) {
new Outer2().new Inner2();
}
上記のコードは次のように出力できますなぜ誰かが説明することができます:
Calling Outer2 constructor
outer2.Outer2: Inner class reference is [email protected]
[email protected]: Outer class reference is [email protected]
Calling Outer2 constructor
outer2.Outer2$Inner2: Inner class reference is
[email protected]
[email protected]: Outer class reference is
[email protected]
Calling Inner1 constructor
outer2.Outer2$Inner2: Inner class reference is
[email protected]
[email protected]: Outer class reference is [email protected]
Calling Inner2 constructor
outer2.Outer2$Inner2: Inner class reference is
[email protected]
[email protected]: Outer class reference is [email protected]
私はなぜ、内側と外側のクラス参照に興味をOuter2スーパータイプのコンストラクタを2回目に呼び出すときと同じですか?
他に何が必要ですか?作成するオブジェクトは2つだけです。 – Progman
外部クラス参照は[email protected]ですが、それははっきりしています。しかし、Outer2コンストラクターが2回目に呼び出されたとき、Outer参照は異なります。それは私が得ないものです。 Inner1コンストラクターとInner2コンストラクターを呼び出すときは、内部参照と外部参照が意味を持ちます。内部と外部の参照を入れ替えた理由 – Daniel