在Java中,我們經常會需要創建一個類繼承自另一個類,這時候就需要用到父類和子類的構造函數。
父類的構造函數會在子類的構造函數中自動調用,確保父類中的成員變量在子類實例化時也能被正常初始化。子類不需要顯式地調用父類的構造函數,這個工作會由Java自動完成。
當我們創建一個子類對象時,Java會首先調用父類的構造函數,然后再調用子類的構造函數。我們可以通過super關鍵字調用父類的構造函數,也可以不使用super關鍵字,此時Java會調用默認的父類構造函數。
public class Animal { private String name; public Animal(String name) { this.name = name; System.out.println("Animal構造函數被調用"); } } public class Dog extends Animal { public Dog(String name) { super(name); System.out.println("Dog構造函數被調用"); } }
在上面的代碼中,我們創建了一個Animal類和一個繼承自Animal的Dog類。Animal類有一個構造函數,接收一個name參數。Dog類有一個構造函數,我們通過super(name)顯式調用了Animal類的構造函數,以確保Animal類的name成員變量能夠被正確初始化。
需要注意的是,如果父類中沒有無參構造函數,那么子類必須顯式調用父類的有參構造函數。如果不這樣做,Java編譯器會報錯。
public class Animal { private String name; public Animal(String name) { this.name = name; System.out.println("Animal構造函數被調用"); } public Animal(int age) { System.out.println("Animal構造函數被調用"); } } public class Dog extends Animal { public Dog(String name) { // 編譯錯誤,沒有匹配的父類構造函數 System.out.println("Dog構造函數被調用"); } public Dog(int age) { // 正確,顯式調用父類有參構造函數 super(age); System.out.println("Dog構造函數被調用"); } }
總之,在Java中,父類和子類的構造函數是非常重要的。了解它的工作原理對于正確使用繼承是至關重要的。
上一篇oracle hr