類的實例化順序是先實例化父類在實例化子類帅腌,也就是先調(diào)用父類的構(gòu)造方法室琢,再調(diào)用子類的構(gòu)造方法,如果在構(gòu)造方法中調(diào)用其他多態(tài)方法,可能導(dǎo)致不正確的結(jié)果疏日。
下面的例子偿洁,在父類中調(diào)用study()
方法的時候,會有點問題
class Person {
public void study() {
System.out.println("I am studing!");
}
public Person() {
study();
}
}
class Student extends Person {
private int age;
public Student() {
this.age = 15;
study();
}
public void study() {
System.out.println("I am " + age + " years old, I am studing!");
}
}
public class Constructor {
public static void main(String[] args) {
Person person = new Student();
person.study();
}
}
執(zhí)行結(jié)果;
I am 0 years old, I am studing!
I am 15 years old, I am studing!
I am 15 years old, I am studing!
在父類的構(gòu)造方法中調(diào)用study
方法時沟优, 其實Student
中的age
還沒有初始化涕滋,因此是默認(rèn)值0。