在 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 Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn