這篇文章總結(jié)了關(guān)于Java構(gòu)造函數(shù)常見問題。
1.為什么創(chuàng)建子類對象需要調(diào)用父類構(gòu)造函數(shù)幕帆?
class Super {
String s;
public Super(){
System.out.println("Super");
}
}
public class Sub extends Super {
public Sub(){
System.out.println("Sub");
}
public static void main(String[] args){
Sub s = new Sub();
}
}
打勇Π:
Super
Sub
當(dāng)從另外一個類繼承時候,super()必須首先在構(gòu)造函數(shù)中調(diào)用很洋。 如果沒有充蓝,編譯器將插入該調(diào)用。 這就是為什么在創(chuàng)建子對象時也調(diào)用超級構(gòu)造函數(shù)的原因。
這不會創(chuàng)建兩個對象谓苟,只有一個子對象官脓。 有超級構(gòu)造函數(shù)調(diào)用的原因是,如果超類可以有私有字段涝焙,需要通過其構(gòu)造函數(shù)初始化卑笨。
編譯器插入超級構(gòu)造函數(shù)后,子類構(gòu)造函數(shù)如下所示:
public Sub(){
super();
System.out.println("Sub");
}