Java基礎05 建構函式
阿新 • • 發佈:2020-09-09
什麼是建構函式
建構函式是一種特殊的函式,其主要的作用是在建立物件的時候初始化物件,即為類的成員變數賦初始值,總與new運算子一起使用在建立物件的語句中。
我們可以參考顯示生活中的示例加以理解,在我們的生活中,道路上飛奔的車輛,其在運出車廠(生產成功,可以看做建立了一個新的物件)就帶有顏色、尺寸、配置、可以執行等等;這些必須的屬性和行為定義在建構函式中,當使用new出一個物件的時候,也就具備這些屬性和方法,就不需要在重新去定義一遍,提高程式設計的效率。
一個例項物件只能執行一次建構函式,可以執行多次一般函式
建構函式的特點
- 構造方法的方法名必須與類名一致。
- 不能定義返回型別。
- 構造方法沒有返回值型別,可以有return,
但不能有返回值
- 一個類可以定義多個建構函式,若沒有定義建構函式,編譯的時候會自動新增一個無參建構函式,預設的無參建構函式不執行任何程式碼。
- 建構函式可以過載。
建構函式的呼叫
- 子類預設呼叫父類的無參建構函式。
- 若子類想呼叫父類的有參建構函式,必須使用 super 來實現。
- 子類在建立物件的時候,會先呼叫父類的建構函式初始化父類,再呼叫自己的建構函式。
注意:建構函式不能繼承
示例
準備工作
定義兩個類,一個父類 ConstructionMethod,一個子類SonConstructionMethod
public class ConstructionMethod { private String name; private int age; public ConstructionMethod(){ System.out.println("這是父類的無參建構函式"); } public ConstructionMethod(String name, int age){ System.out.println("這是父類的有參建構函式"); this.name = name; this.age = age; } public void printInfo(){ System.out.println("這是父類的輸出 -> name值:" + name + ", age值:" + age ); } }
public class SonConstructionMethod extends ConstructionMethod{
private String sex;
private double height;
public void printInfo(){
System.out.println("這是子類的輸出 -> sex值:" + sex + ", height值:" + height );
}
}
測試
- 測試無參建構函式(子類不寫建構函式,只新增一個主方法)
public static void main(String[] args) { constructionMethodTest(); } /** * 測試無參建構函式 */ private static void constructionMethodTest(){ // 子類中不定建構函式,在初始化物件的時候,就呼叫無參建構函式 SonConstructionMethod sonInfo = new SonConstructionMethod(); noParameterConstruction.printInfo(); }
輸出
這是父類的無參建構函式
這是父類的輸出 -> name值:null, age值:0
從輸出結果中,我們可以看出子類中沒有寫無參建構函式,在子類例項化物件的時候,呼叫了無參建構函式,呼叫順序(先呼叫父類的無參建構函式);由於子類的和父類的無參建構函式都沒有做對父類屬性賦值,所以輸出的就是屬性的預設值。
- 測試有參建構函式
在子類中新增一個有參建構函式和一個測試有參建構函式的方法
public SonConstructionMethod(String sex, double height){
// 使用 super 對父類的屬性進行復制
super("張三", 19);
this.sex = sex;
this.height = height;
System.out.println("這是子類有參建構函式");
}
/**
* 測試有參建構函式
*/
private static void haveConstructionMethodTest(){
ConstructionMethod haveParameterConstruction = new SonConstructionMethod("男",170.30);
haveParameterConstruction.printInfo();
}
子類的main方法改為呼叫haveConstructionMethodTest的測試方法
public static void main(String[] args) {
// constructionMethodTest();
haveConstructionMethodTest();
}
輸出結果
這是父類的有參建構函式
這是子類有參建構函式
這是父類的輸出 -> name值:張三, age值:19
從輸出結果中,我們可以看出在子類的有參建構函式中,要想給父類賦值,需要使用 super(xxx,xxx ....)方法(前提是想通過子類為父類的屬性賦值
)。