最近在看《Thinking in Java》,看到一个关于内部类的例子,详细如下:
- class Egg2 {
- protected class Yolk {
- public Yolk() {
- System.out.println("Egg2.Yolk()");
- }
- public void f() {
- System.out.println("Egg2.Yolk.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("BigEgg2.Yolk()");
- }
- public void f() {
- System.out.println("BigEgg2.Yolk.f()");
- }
- }
- public BigEgg2() {
- insertYolk(new Yolk());
- }
- public static void main(String[] args) {
- Egg2 e2 = new BigEgg2();
- e2.g();
- }
- }
- /*
- Egg2.Yolk()
- New Egg2()
- Egg2.Yolk()
- BigEgg2.Yolk()
- BigEgg2.Yolk.f()
- */
class Egg2 {
protected class Yolk {
public Yolk() {
System.out.println("Egg2.Yolk()");
}
public void f() {
System.out.println("Egg2.Yolk.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("BigEgg2.Yolk()");
}
public void f() {
System.out.println("BigEgg2.Yolk.f()");
}
}
public BigEgg2() {
insertYolk(new Yolk());
}
public static void main(String[] args) {
Egg2 e2 = new BigEgg2();
e2.g();
}
}
/*
Egg2.Yolk()
New Egg2()
Egg2.Yolk()
BigEgg2.Yolk()
BigEgg2.Yolk.f()
*/
通过这个例子,很好的复习了关于类初始化的过程,下面对其调用顺序做简要标注: