Java编程思想中的一个关于类实例化的说明
程序员文章站
2022-07-10 10:46:56
...
最近在看《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() */
通过这个例子,很好的复习了关于类初始化的过程,下面对其调用顺序做简要标注:
简要说明:
0、程序入口,初始化BigEgg2;
1、初始化BigEgg2的父类Egg2;
2、初始化类Egg2中的实例变量Yolk;
3、执行Egg2.Yolk的构造函数;
4、执行Egg2的构造函数;
5、返回并调用BigEgg2中的构造函数;
6、创建BigEgg2.Yolk的实例;
7、初始化BigEgg2.Yolk的父类Egg2.Yolk;
8、执行Egg2.Yolk的构造函数;
9、执行BigEgg2.Yolk的构造函数;
10、执行insertYokl函数,做对应的处理;
11、执行e2.g函数;
12、执行y.f函数;
13、执行f函数(覆盖了父类中的该方法)内容;
上一篇: 浅谈Java定时器发展