标题: 非静态成员变量显示初始化是在super( )后构造代码块前 [打印本页] 作者: jauliun 时间: 2015-12-27 19:49 标题: 非静态成员变量显示初始化是在super( )后构造代码块前 非静态成员变量显示初始化是在super( )后构造代码块前;并非默认初始化后就立刻显示初始化;请看下列代码:
class Demo {
public static void main(String[] args) {
new Zi( );
}
}
class Fu {
String name = "Fu";
int i = 1;
{
System.out.println("----------------------------" );
System.out.println("Fu构造代码块:"+ name+"-"+ i );
i = 11;
fun( );
}
public Fu( ) {
System.out.println("----------------------------" );
System.out.println("Fu构造方法:"+ name+"-"+ i);
i = 111;
fun( );
}
public void fun( ) {
System.out.println("Fu的fun:"+name+"-"+i);
i = 1111;
}
}
class Zi extends Fu {
String name = "Zi";
int i = 2;
{
System.out.println("----------------------------" );
System.out.println("Zi构造代码块:"+ name+"-"+ i );
i = 22;
fun( );
}
public Zi( ) {
super( );
System.out.println("----------------------------" );
System.out.println("Zi构造方法:"+ name+"-"+ i );
i = 222;
}
public void fun( ) {
System.out.println("Zi的fun:"+name+"-"+i);
i = 2222;
}
}
/*
运行结构
----------------------------
Fu构造代码块:Fu-1 <--可以看到父类的name和i已经显示初始化
Zi的fun:null-0 <--fun方法重写了,访问了子类fun,还有子类的name和i为null和0
说明子类已经默认初始化还未显示初始化
----------------------------
Fu构造方法:Fu-11
Zi的fun:null-2222 <--上面访问fun时子类的i被赋值为2222
----------------------------
Zi构造代码块:Zi-2 <--子类的i显示初始化了 并且覆盖了2222
Zi的fun:Zi-22
----------------------------
Zi构造方法:Zi-2222
请按任意键继续. . .
*/