public static void main(String[] args){
Zi z = new Zi();
z.show();
}
所以严格说这句压根就没打印
void show(){
System.out.println("zi show num = " + num);//此处为什么是0
}
个人理解 希望能帮到你
作者: HM李超 时间: 2013-3-9 15:48
程序运行前,fu类和zi类被加载到内存中,zi类继承fu类,对象创建时,fu类在内存中先被初始化,fu类的构造方法调用了fu的show方法,但是zi类又复写了fu类的show方法,
对象会调用子类的show方法完成初始化,此时,zi类的静态属性和初始化块还没有被人为初始化,所以输出的num值为系统默认初始化值,0.
接着程序的执行顺序是:先为zi类的属性num指定值和执行初始化块,再执行zi类构造器里的代码。
运行结果的顺序如下:
zi show num = 0
cons code num = 8
cons function num = 8