關於子類與父類的構造器的小事情一直不是很瞭解,今天專門抽出空寫幾行代碼,親自搞清楚,這樣印象比較深刻吧.
首先,構造器是針對類來講的.
1.任意一個只繼承java.lang類的類.不指定構造器將被由系統自動生成無參的構造器.
比如:
public class Animals(){
}
測試類:
public static void main (String[] args){
Animals cat = new Animals();
}
.
.
2.子類的實例化中,會先執行父類無參構造方法,再執行自己的
public class Animals(){
System.out.println("Animals的構造方法被執行了");
}
public class Cat extends Animals(){
}
public static void main(String[] args){
Cat myCat = new Cat();
}//結果輸出"Animals的構造方法被執行了"
.
.
.
3.父類的構造器不是 無參構造器 時,系統會擦除默認給定的無參構造器.此時,子類對象無法通過無參構造器實例化父類對象,進而實例化自己,必須也要指定顯式的構造器給子類
public class Animals{
public Animals( int i){
System.out.println("i");
}
}
//這樣寫會報錯:
//implict super constructor Animals() is undefined for
// default constructor.Must define an explict
// constructor
//Cat的默認構造器無法調用Cat父類無參構造方法Animals().必須要爲
// Cat類顯式調用一個構造器
//implict翻譯成無參構對不?有點尷尬.要是隱式構造器我就呵呵了
public class Cat{
}
可以看出,主要是父類無參構造器被擦除了.只要有父類有無參構造器,子類便能正常實例化
public class Cat{
public Cat(){
//使用super關鍵字,寫入參數.自動進行方法的重載.
super.(1);
}
}