学习笔记——继承体系中类的初始化顺序
2017-01-17 17:21
239 查看
package 测试; public class Test { public static void main(String[] args) { new C(); } } class A { public A(){ System.out.println("A的构造器主体"); } private AttributeA attr= new AttributeA(); } class B extends A{ private AttributeB attr= new AttributeB(); public B(){ System.out.println("B的构造器主体"); } } class C extends B{ private AttributeC2 attr2= new AttributeC2(); private AttributeC1 attr1= new AttributeC1(); public C(){ super(); System.out.println("C的构造器主体"); } } class AttributeA{ public AttributeA(){ System.out.println("A的属性初始化完成"); } } class AttributeB{ public AttributeB(){ System.out.println("B的属性初始化完成"); } } class AttributeC1{ public AttributeC1(){ System.out.println("C的属性1初始化完成"); } } 4000 class AttributeC2{ public AttributeC2(){ System.out.println("C的属性2初始化完成"); } }
C继承B继承A,new AttributeA (B,C1,C2)分别是类A,B,C的属性值。
结果: A的属性初始化完成 A的构造器主体 B的属性初始化完成 B的构造器主体 C的属性2初始化完成 C的属性1初始化完成 C的构造器主体
初始化步骤:
1)调用基类构造器。这个步骤会反复递归下去直至最底层类,再从最底层向上一层层初始化。
如上述结果所示:首 A→B→C 末
2)按照声明顺序调用成员的初始化方法。
即代码书写顺序,如上述结果中,首先输出了“C的属性2”,再输出了“C的属性1”
3)调用导出类构造器的主体。
如上述结果所示,先输出了类的属性而后才是构造器主体。
(ps:基类即父类,导出类即子类)
相关文章推荐
- Java学习笔记二十三:Java的继承初始化顺序
- C++ Primer Plus学习笔记之继承类的初始化顺序
- Effective C++学习笔记:初始化列表中成员列出的顺序和它们在类中声明的顺序相同
- java学习笔记4:对象的初始化顺序(官方实例)
- Thinking in Java [Java编程机制] 学习笔记 -- 初始化顺序Order of initialization
- List继承体系实现内幕和方法操作源码揭秘之Scala学习笔记-32
- java学习笔记----初始化顺序
- iOS学习笔记-Objective-C-继承和实例化、对象初始化
- Java继承 学习 && 类初始化顺序
- java学习个人笔记---类成员变量初始化顺序
- JAVA学习笔记之继承和父类子类实例变量的初始化内存分析图
- openerp学习笔记 对象继承,对象初始化数据
- Effective C++学习笔记:初始化列表中成员列出的顺序和它们在类中声明的顺序相同
- 【慕课笔记】U3 继承 第3节 JAVA中的继承初始化顺序
- java学习笔记3:对象的初始化顺序
- C++学习笔记(五):继承及类的初始化
- Java学习笔记(1) 对象初始化顺序
- 【Java学习笔记】类初始化执行顺序
- Java学习笔记之继承与初始化