class person
public person(string name,int age) }
class student extends person
public student(string name ,int age,string school)
public student(string name ,int age,string school,string grade) }
class test
}
輸出如下:
st1:
person無引數建構函式
student 無引數的建構函式
---------------------------
st2:
person無引數建構函式
student 3 引數的建構函式
---------------------------
st3:
person 2 引數的建構函式
student 4 引數的建構函式,super().
說明了建立乙個子類的物件例項的時候,必先呼叫父類的無引數的建構函式(預設建構函式),假如父類有帶引數的建構函式,那麼系統將不會給它建立無引數的建構函式,這時,子類在例項化的時候,因為找不到父類的預設建構函式,編譯器將會報錯,但如果在子類的建構函式中指定用父類的帶引數的建構函式的時候,或者在父類中加乙個無引數的建構函式,就不會報錯。
=============================================
我們假設a是b的父類,b是a的子類。
1、如果程式設計師沒有給類a沒有提供建構函式,則編譯器會自動提供乙個預設的無引數的建構函式,如果使用者提供了自己的建構函式,則編譯器就不在提供預設的無引數建構函式。
2、子類b例項化時會自動呼叫父類a的預設建構函式,所以如果a的預設的無引數的建構函式為private,則編譯器會報錯,而如果a沒有提供預設的無引數的建構函式,而提供了其他型別的建構函式,編譯器同樣會報錯,因為b找不到a的預設無引數建構函式。所以,我們最好給父類a提供乙個無引數的建構函式。
3、或者在b的建構函式中顯示的呼叫父類a的有參建構函式。super(parameter)
4、即使子類中的建構函式有引數,如果他沒有顯示呼叫父類中的建構函式,他仍然會預設呼叫父類中的預設建構函式
關於JAVA中建構函式的問題
建構函式是乙個類中的特殊的函式,建構函式用於在生成物件時的初始化。普通的方法在類中按照順序去執行,而建構函式在使用new運算子建立物件時才會自動呼叫。在繼承的相關概念中,子類繼承父類。在生成子類物件的同時,會形成如下初始化的優先順序。1.生成子類,首先呼叫父類 2.在類中,首先初始化屬性,後初始化構...
java 繼承中的構造方法
1 子類構造方法必須先呼叫其基類構造方法。2 子類可以在構造方法中用super argument list 來呼叫基類的構造方法。使用this argument list 來呼叫本類的另外構造方法。如果使用super 來呼叫基類,必須寫在子類構造方法的第一行。3 如果子類中沒有顯示的呼叫基類的構造方...
java繼承中的構造方法
注 子類的構造過程中必須呼叫其基類的構造方法。如果子類的構造方法中沒有顯式地呼叫基類的構造方法,則系統預設呼叫基類的無引數構造方法。如果子類構造方法中既沒有顯式呼叫基類構造方法,而基類又沒有無引數的構造方法,則編譯出錯。子類可以在自己的構造方法中使用super argument list 呼叫基類的...