/*
新建兩個類,父類Father和子類Son,爲了觀察實驗效果,各自創建一個printInit()
方法,此方法打印信息,並可以返回我們需要的一個初始值。
1.首先訪問InitOrder.main()(static方法);
2.然後加載Son類,發現其繼承自Fatherl類,繼續加載Father類(如果還有基類,繼續向上加載);
3.初始化Father類的static成員,此時Father類的普通成員置爲默認值(int型置之爲0);
4.然後初始化子類Son的static成員,同樣Son類的普通成員置爲默認值;
5.然後分別初始化Father的普通成員和構造器;
6.最後初始化Son的普通成員和構造器。
初始化順序優先級
同一個類中優先級:
static成員 > 普通成員 > 構造器
類之間:
父類 > 子類
*/
import static com.tiantian.Print.*;
class Father{
private int age = printInit("2.Father's age.");
private static int weight = printInit("1.Father's weight.");
Father(){
println("3.Father's age is "+age);
}
private static int printInit(String str){
println(str);
return 57;
}
}
class Son extends Father{
private int age = printInit("2.Son's age.");
private static int weight = printInit("1.Son's weight.");
Son(){
println("3.Son's age is "+age);
}
private static int printInit(String str){
println(str);
return 24;
}
}
public class InitOrder{
public static void main(String[] args){
new Son();
}
}
/*
程序輸出如下:
1.Father's weight.
1.Son's weight.
2.Father's age.
3.Father's age is 47
2.Son's age.
3.Son's age is 22
*/