Java 中的超級建構函式

Rupam Yadav 2023年10月12日
  1. 在 Java 中使用帶有無引數建構函式的 super()
  2. 在 Java 中使用帶有引數化建構函式的 super()
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
作者: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn