摘要:Java 基本的对象初始化过程,子类的初始化,以及涉及到父类和子类的转化时可能引起混乱的情况。
对于一个简单类的初始化过程是:
static 修饰的模块(static 变量和 static 块) => 按照代码顺序依次执行。
↓
实例变量 及非 static 模块 => 按照代码顺序依次执行。
↓
构造函数 => 执行对应的构造函数。
父类 static 修饰的模块
↓
子类 static 修饰模块
↓
父类实例变量和非 static 块
↓
父类对应构造函数。当子类对应构造函数中没有显示调用时调用的是父类默认的构造函数。
↓
子类实例变量和非 static 块
↓
子类构造函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | package code0507; public class Demo { public static void main(String[] args) { Sub sub = new Sub(); System.out.println(sub); } } class Super { int a = 6; public Super() { test(); //被子类同名函数覆盖,优先访问子类 test } int b=9; public void test() { System.out.println(a); } } class Sub extends Super { int a = 8; public Sub() { test(); } public void test() { System.out.println(a); } } |
---|
运行结果
1 2 | 0 8 |
---|