代码
以下代码运行结果
结果:
(5)(1)(10)(6)(9)(3)(2)(9)(8)(7)(9)(3)(2)(9)(8)(7)
考点
- 类初始化过程
- 实例初始化过程
- 方法的重写
类初始化过程
顺序:
先父类初始化
1. j = method(); (5)
2.父类的的静态代码块 (1)
子类初始化
3. j = method(); (10)
4. 子类静态代码块 (6)
1、2、3、4皆按照代码顺序执行
即如代码 2 在 1 前则结果为 (1)(5)
实例初始化
顺序
先父类的实例化方法:
1.super() (最前)
2. i = test(); (9)
3. 父类的非静态代码块 (3)
4. 父类的无参构造(最后) (2)
2、3 按代码先后顺序执行
非静态方法前面其实还有一个默认的对象this
this在构造器(或<init>)它表示的是正在创建的对象
因为这里是在创建Son对象,所以test()执行的是子类重写的代码(面向对象多态)
2. i = test(); 执行的是子类重写的test()方法
子类的实例化方法:
5.super() (最前)
6. i = test(); (9)
7. 子类的非静态代码块 (8)
8. 子类的无参构造(最后) (7)
6、7 按代码先后顺序执行
因为创建了两个Son对象,因此实例化方法<init>执行了两遍
(9) (3)(2)(9)(8)(7)又执行了一次