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

Rupam Yadav 2023年1月30日 2021年2月7日
  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
Author: 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