/*
新建两个类,父类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
*/