W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
構造函數不是類的成員,它們不是由子類繼承的。
它們用于初始化實例變量。
class CSuper { public CSuper() { System.out.println("Inside CSuper() constructor."); } } class CSub extends CSuper { public CSub() { System.out.println("Inside CSub() constructor."); } } public class Main { public static void main(String[] args) { CSub cs = new CSub(); } }
上面的代碼生成以下結果。
下面顯示了如何編譯器注入一個super()來立即調用父類的無參數構造函數。
class CSuper { public CSuper() { super(); // Injected by the compiler System.out.println("Inside CSuper() constructor."); } } class CSub extends CSuper { public CSub() { super(); // Injected by the compiler System.out.println("Inside CSub() constructor."); } } public class Main { public static void main(String[] args) { CSub cs = new CSub(); } }
上面的代碼生成以下結果。
關鍵字super指的是類的直接父類。
我們可以調用超類構造函數,只使用super關鍵字作為構造函數中的第一個語句。
我們可以將超類的no-args構造函數或任何其他構造函數顯式地調用為類的構造函數中的第一個語句。
只有在沒有明確添加的情況下,編譯器才會注入no-args構造函數調用。
class Employee { private String name = "Unknown"; public Employee(String name) { this.name = name; } public void setName(String name) { this.name = name; } public String getName() { return name; } } class Manager extends Employee { public Manager(String name) { super(name); } } public class Main { public static void main(String[] args) { Manager mgr = new Manager("Tom"); String name = mgr.getName(); System.out.println("Manager name: " + name); } }
上面的代碼生成以下結果。
每個類都必須直接或間接地從其構造函數中調用其超類的構造函數。
如果超類沒有no-args構造函數,我們必須顯式地調用超類的任何其他構造函數。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: