1. 程式人生 > 實用技巧 >Java基礎05 建構函式

Java基礎05 建構函式

什麼是建構函式

  建構函式是一種特殊的函式,其主要的作用是在建立物件的時候初始化物件,即為類的成員變數賦初始值,總與new運算子一起使用在建立物件的語句中。
  我們可以參考顯示生活中的示例加以理解,在我們的生活中,道路上飛奔的車輛,其在運出車廠(生產成功,可以看做建立了一個新的物件)就帶有顏色、尺寸、配置、可以執行等等;這些必須的屬性和行為定義在建構函式中,當使用new出一個物件的時候,也就具備這些屬性和方法,就不需要在重新去定義一遍,提高程式設計的效率。
  一個例項物件只能執行一次建構函式,可以執行多次一般函式

建構函式的特點

  1. 構造方法的方法名必須與類名一致。
  2. 不能定義返回型別。
  3. 構造方法沒有返回值型別,可以有return,但不能有返回值
    ,return只表示結束,一般也不使用return。
  4. 一個類可以定義多個建構函式,若沒有定義建構函式,編譯的時候會自動新增一個無參建構函式,預設的無參建構函式不執行任何程式碼。
  5. 建構函式可以過載。

建構函式的呼叫

  1. 子類預設呼叫父類的無參建構函式。
  2. 若子類想呼叫父類的有參建構函式,必須使用 super 來實現。
  3. 子類在建立物件的時候,會先呼叫父類的建構函式初始化父類,再呼叫自己的建構函式。

  注意:建構函式不能繼承

示例

準備工作

  定義兩個類,一個父類 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 );
    }
}

測試

  1. 測試無參建構函式(子類不寫建構函式,只新增一個主方法)
public static void main(String[] args) {
    constructionMethodTest();
}

/**
 * 測試無參建構函式
 */
private static void constructionMethodTest(){
    // 子類中不定建構函式,在初始化物件的時候,就呼叫無參建構函式
    SonConstructionMethod sonInfo = new SonConstructionMethod();
    noParameterConstruction.printInfo();
}

輸出

這是父類的無參建構函式
這是父類的輸出 -> name值:null, age值:0

  從輸出結果中,我們可以看出子類中沒有寫無參建構函式,在子類例項化物件的時候,呼叫了無參建構函式,呼叫順序(先呼叫父類的無參建構函式);由於子類的和父類的無參建構函式都沒有做對父類屬性賦值,所以輸出的就是屬性的預設值。

  1. 測試有參建構函式

在子類中新增一個有參建構函式和一個測試有參建構函式的方法

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 ....)方法(前提是想通過子類為父類的屬性賦值)。