HOWTO · Java

Java 中的超級建構函式

本文介紹 Java 中超級建構函式的使用。

本頁內容

本教程將討論 super 關鍵字以從其子類呼叫父類的變數、函式和建構函式。

以下部分展示瞭如何使用 super() 呼叫子類父級的建構函式。

在 Java 中使用帶有無引數建構函式的 super()

當我們在 Java 中使用繼承的概念時,就會使用 super 關鍵字。

當我們使用關鍵字 extends 繼承一個類時,我們得到被繼承的類:父類或超類,繼承父類的類稱為子類或子類。

我們使用 super() 來呼叫父類的建構函式。儘管如此,假設我們要呼叫預設建構函式或不帶任何父類引數的建構函式。

在這種情況下,我們不需要呼叫 super(),因為它會在建構函式建立時自動呼叫。

為了更好地理解它,讓我們看兩個例子。在下面的第一個示例中,我們有三個類。

在 Vehicle 類中,我們在其無引數建構函式中列印一條訊息。Motorcycle 類使用 extends 關鍵字繼承 Vehicle,使 Vehicle 成為超類,Motorcycle 成為子類。

我們在 Motorcycle 類中列印類似 Vehicle 建構函式的訊息。當我們使用 new 關鍵字建立 Motorcycle 的物件時,會呼叫類的建構函式。

請注意,Vehicle 類的建構函式也稱為 Motorcycle 建構函式。發生這種情況是因為每個無引數和預設建構函式呼叫都附加了一個 super()。

class Vehicle {
  Vehicle() {
    System.out.println("Vehicle Class Constructor Called");
  }
}

class Motorcycle extends Vehicle {
  Motorcycle() {
    System.out.println("Motorcycle Class Constructor Called");
  }
}

class ExampleClass1 {
  public static void main(String[] args) {
    new Motorcycle();
  }
}

輸出:

Vehicle Class Constructor Called
Motorcycle Class Constructor Called

在 Java 中使用帶有引數化建構函式的 super()

與無引數建構函式自動呼叫 super() 不同,引數化建構函式不會呼叫它,我們需要使用引數呼叫它。

在示例中,我們有與上述程式相同的類,但 Vehicle 類的建構函式在該程式中接收一個引數。

現在,如果我們嘗試從 Motorcycle 的建構函式中呼叫 super(),我們會收到錯誤,因為 Vehicle 建構函式需要一個引數。

為了解決這個問題,我們需要在建立物件時在 Motorcycle 的建構函式中傳遞的 super() 中傳遞一個引數。

class Vehicle {
  Vehicle(String str) {
    System.out.println("Vehicle Class Constructor Called");
  }
}

class Motorcycle extends Vehicle {
  Motorcycle(String str) {
    super(str);
    System.out.println("Motorcycle Class Constructor Called");
  }
}

class ExampleClass1 {
  public static void main(String[] args) {
    new Motorcycle("example string");
  }
}

輸出:

Vehicle Class Constructor Called
Motorcycle Class Constructor Called