public class Animal{
public Animal(){
}
public void cry(){
System.out.print("crying");
}
}
其中為什麼還要再加上public Animal(){ }這一行代碼?
創建一個子類對象的實例的時候,必先調用父類的無參構造函數(默認構造函數),假如父類有帶參數的構造函數,那麼系統不會給他創建無參數的構造函數,這時,子類在實例化的時候,因為找不到父類的默認構造函數,編譯器會報錯,如果在子類的構造函數中指定使用父類的帶參數的構造函數的時候,或者在父類中加一個無參數的構造函數的時候,就不會報錯了。
我們假設A是B的父類,B是A的子類。
1、如果沒有給A類沒有提供構造函數,則編譯器會自動提供一個默認的構造函數,如果用戶提供了自己的構造函數,則編譯器不提供默認的構造函數。
2、子類B實例化時會自動調用父類的構造函數,所以如果A的默認的無參數的構造函數為private,則編譯器會報錯,而如果A沒有提供默認的無參數的構造函數,而提供其他的構造函數,編譯器同樣報錯,因為找不到A的默認無參數構造函數。所以我們編程中最好給一個默認的構造函數。
3、或者在B的構造函數中顯示的調用父類A的有參構造函數。super(parameter