|
|
|
|
|
|
t**********h 发帖数: 2273 | 1 今天面了一个和下面类似的一个题,很有意思,大家一起看看。写出打印的东西
class Egg2 {
protected class Yolk {
public Yolk() { print("Egg2.Yolk()"); }
public void f() { print("Egg2.Yolk.f()");}
}
private Yolk y = new Yolk();
public Egg2() { print("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() { print("BigEgg2.Yolk()"); }
public void f() { print("BigEgg2.Yolk.f()"); }
}
public BigEgg2() { insertYolk(new Yolk()); }
public static void main(String[] args) {
Egg2 e2 = new BigEgg2();
e2.g();
}
} | Z*****Z 发帖数: 723 | 2 Egg2 e2 = new BigEgg2();
BigEgg2 Constructor called
Egg2 constructor called
Yolk y initialize
Egg2.Yolk constructor called
"Egg2.Yolk()"
Egg2.Yolk constructor return
"New Egg2()"
Egg2 constructor return
now back in BigEgg2 constructor
create a new BigEgg2.Yolk object
BigEgg2.Yolk constructor called
Egg2.Yolk constructor called
"Egg2.Yolk()"
Egg2.Yolk constructor return
"BigEgg2.Yolk()"
BigEgg2.Yolk constructor return
e2.g();
"BigEgg2.Yolk.f()"
双引号里的是输出
update:我真是太闲了
【在 t**********h 的大作中提到】 : 今天面了一个和下面类似的一个题,很有意思,大家一起看看。写出打印的东西 : class Egg2 { : protected class Yolk { : public Yolk() { print("Egg2.Yolk()"); } : public void f() { print("Egg2.Yolk.f()");} : } : private Yolk y = new Yolk(); : public Egg2() { print("New Egg2()"); } : public void insertYolk(Yolk yy) { y = yy; } : public void g() { y.f(); }
|
|
|
|
|
|