在 Java 中呼叫另一個建構函式

Rupam Yadav 2023年10月12日
  1. 在 Java 中從同一個類中呼叫一個建構函式
  2. 在 Java 中從基類中呼叫另一個建構函式
在 Java 中呼叫另一個建構函式

在 Java 中,物件初始化後呼叫建構函式的順序稱為建構函式鏈。當我們想通過使用一個例項來呼叫一個建構函式時,就會用到它。

在 Java 中從同一個類中呼叫一個建構函式

當我們想從同一個類的另一個建構函式中呼叫一個建構函式時,我們使用 this 關鍵字。使用 this 關鍵字的表示式必須是建構函式的第一行。在建構函式鏈中,順序並不重要。它必須有至少一個不使用 this 關鍵字的建構函式。

在下面的例子中,我們有一個類 Test,它有 3 個建構函式。其中一個是沒有任何引數的預設建構函式,而另外兩個建構函式則是引數化的。在 main 方法中,我們用 new 關鍵字例項化類物件,沒有傳遞任何引數。

它呼叫預設的建構函式 Test(),使用 this("Steve") 重定向呼叫引數化的建構函式 Test(String name)。建構函式 Test(String name) 進一步將呼叫重定向到另一個引數化的建構函式 Test(int age,String place),使用 this(30,"Texas")

Test(int age, String place) 裡面的語句首先被執行。之後,執行 Test(String name) 建構函式的其餘語句。最後,執行預設建構函式的剩餘語句,物件初始化成功。

public class Test {
  Test() {
    this("Steve");
    System.out.println("Default Constructor");
  }
  Test(String name) {
    this(30, "Texas");
    System.out.println("Name - " + name);
  }
  Test(int age, String place) {
    System.out.println("Age- " + age + ", place- " + place);
  }
  public static void main(String[] args) {
    Test test = new Test();
  }
}

輸出:

Age- 30, place- Texas
Name - Steve
Default Constructor

在 Java 中從基類中呼叫另一個建構函式

當有多個類有繼承關係時,我們需要使用 super 關鍵字從子類呼叫父類的建構函式。與 this 關鍵字不同,JVM 會自動把 super 關鍵字。

基類是由派生類擴充套件的父類。我們在例項化類物件的主方法中,呼叫了同一類的預設建構函式,該方法使用 this("Adam") 進一步重定向呼叫子類的引數化建構函式。

super(name) 呼叫 Base 類的引數化建構函式 Base(String name)。使用 this() 呼叫 Base 類的預設建構函式。類的變數也在這裡使用 this.name = name 進行初始化。

Base 類的預設建構函式裡面的程式碼就執行了。之後,引數化建構函式 Base(String name) 裡面的語句執行。最後,執行剩餘的 Derived 類的引數化建構函式裡面的語句。

class Base {
  String name;
  Base() {
    System.out.println("Default Constructor Base Class");
  }
  Base(String name) {
    this();
    this.name = name;
    System.out.println("Parameterized Constructor Base Class called:- " + name);
  }
}
class Derived extends Base {
  Derived() {
    this("Adam");
  }
  Derived(String name) {
    super(name);
    System.out.println("Parameterized Constructor Derived Class called: " + name);
  }
  public static void main(String[] args) {
    Derived derived = new Derived();
  }
}

輸出:

Default Constructor Base Class
Parameterized Constructor Base Class called:- Adam
Parameterized Constructor Derived Class called: Adam
作者: 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

相關文章 - Java Constructor