kellyputty
asked on
overriding inner classess
The following code:
-------------------------- ---------- ---------
class Egg2 {
protected class Yolk {
public Yolk() { System.out.println("Egg2.Y olk()"); }
public void f() { System.out.println("Egg2.Y olk.f()"); }
}
private Yolk y = new Yolk();
public Egg2() { System.out.println("New Egg2()"); }
public void insertYolk(Yolk yy) { y = yy; }
public void g() { y.f(); }
}
public class BigEgg2 extends Egg2 {
public class Yolk extends Egg2.Yolk {
public Yolk() { System.out.println("BigEgg 2.Yolk()") ; }
public void f() {
System.out.println("BigEgg 2.Yolk.f() ");
}
}
public BigEgg2() { insertYolk(new Yolk()); }
public static void main(String[] args) {
Egg2 e2 = new BigEgg2();
e2.g();
}
} ///:~
-------------------------- ---------- ---------- -------
Outputs:
-------------------------- ---------- ---------- -------
Egg2.Yolk()
New Egg2()
Egg2.Yolk()
BigEgg2.Yolk()
BigEgg2.Yolk.f()
-------------------------- ---------- ---------- -----
1) Is the first Egg2.Yolk() created by an upcast via insertYolk method of the BigEgg2 constructor which in turn intantiates the Yolk constructor?
2) Next the base class Egg2's constructor is called resulting in: New Egg2?
3) I am at a loss as to how the last three were instantiated....
--------------------------
class Egg2 {
protected class Yolk {
public Yolk() { System.out.println("Egg2.Y
public void f() { System.out.println("Egg2.Y
}
private Yolk y = new Yolk();
public Egg2() { System.out.println("New Egg2()"); }
public void insertYolk(Yolk yy) { y = yy; }
public void g() { y.f(); }
}
public class BigEgg2 extends Egg2 {
public class Yolk extends Egg2.Yolk {
public Yolk() { System.out.println("BigEgg
public void f() {
System.out.println("BigEgg
}
}
public BigEgg2() { insertYolk(new Yolk()); }
public static void main(String[] args) {
Egg2 e2 = new BigEgg2();
e2.g();
}
} ///:~
--------------------------
Outputs:
--------------------------
Egg2.Yolk()
New Egg2()
Egg2.Yolk()
BigEgg2.Yolk()
BigEgg2.Yolk.f()
--------------------------
1) Is the first Egg2.Yolk() created by an upcast via insertYolk method of the BigEgg2 constructor which in turn intantiates the Yolk constructor?
2) Next the base class Egg2's constructor is called resulting in: New Egg2?
3) I am at a loss as to how the last three were instantiated....
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
:)
ASKER