java代碼:
class Person
public Person
}
class Student extends Person
public Student
public Student
}
class Test
}
/
=======================================
輸出如下:
E:“JavaWorkjava Test
st1:
person無參數(shù)構(gòu)造函數(shù)
student 無參數(shù)的構(gòu)造函數(shù)
---------------------------
st2:
person無參數(shù)構(gòu)造函數(shù)
student 3 參數(shù)的構(gòu)造函數(shù)
---------------------------
st3:
person 2 參數(shù)的構(gòu)造函數(shù)
student 4 參數(shù)的構(gòu)造函數(shù),super.
說明了創(chuàng)建一個子類的對象實例的時候,必先調(diào)用父類的無參數(shù)的構(gòu)造函數(shù)(默認(rèn)構(gòu)造函數(shù)),假如父類有帶參數(shù)的構(gòu)造函數(shù),那么系統(tǒng)將不會給它創(chuàng)建無參數(shù)的構(gòu)造函數(shù),這時,子類在實例化的時候,因為找不到父類的默認(rèn)構(gòu)造函數(shù),編譯器將會報錯,但假如在子類的構(gòu)造函數(shù)中指定用父類的帶參數(shù)的構(gòu)造函數(shù)的時候,或者在父類中加一個無參數(shù)的構(gòu)造函數(shù),就不會報錯。
=============================================
我們假設(shè)A是B的父類,B是A的子類。
1、假如程序員沒有給類A沒有提供構(gòu)造函數(shù),則編譯器會自動提供一個默認(rèn)的無參數(shù)的構(gòu)造函數(shù),假如用戶提供了自己的構(gòu)造函數(shù),則編譯器就不在提供默認(rèn)的無參數(shù)構(gòu)造函數(shù)。
2、子類B實例化時會自動調(diào)用父類A的默認(rèn)構(gòu)造函數(shù),所以假如A的默認(rèn)的無參數(shù)的構(gòu)造函數(shù)為private,則編譯器會報錯,而假如A沒有提供默認(rèn)的無參數(shù)的構(gòu)造函數(shù),而提供了其他類型的構(gòu)造函數(shù),編譯器同樣會報錯,因為B找不到A的默認(rèn)無參數(shù)構(gòu)造函數(shù)。所以,我們最好給父類A提供一個無參數(shù)的構(gòu)造函數(shù)。
3、或者在B的構(gòu)造函數(shù)中顯示的調(diào)用父類A的有參構(gòu)造函數(shù)。