構(gòu)造函數(shù)不是類的成員,它們不是由子類繼承的。它們用于初始化實(shí)例變量。
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();
}
}
上面的代碼生成以下結(jié)果。
Inside CSuper() constructor.
Inside CSub() constructor.
下面顯示了編譯器如何注入一個(gè)super()
調(diào)用來調(diào)用父類的無參數(shù)構(gòu)造函數(shù)
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();
}
}
上面的代碼生成以下結(jié)果。
關(guān)鍵字super
指的是類的直接父類(超類)??梢哉{(diào)用超類構(gòu)造函數(shù),使用super
關(guān)鍵字必須要放在構(gòu)造函數(shù)中的第一個(gè)語句。
可以將超類的無參數(shù)構(gòu)造函數(shù)或任何其他構(gòu)造函數(shù)顯式地調(diào)用在類的構(gòu)造函數(shù)中的第一個(gè)語句。只有在沒有明確添加的情況下,編譯器才會注入無參數(shù)構(gòu)造函數(shù)調(diào)用。
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("李經(jīng)理");
String name = mgr.getName();
System.out.println("Manager name: " + name);
}
}
上面的代碼生成以下結(jié)果。
Manager name: 李經(jīng)理
每個(gè)類都必須直接或間接地從其構(gòu)造函數(shù)中調(diào)用其超類的構(gòu)造函數(shù)。如果超類沒有無參數(shù)構(gòu)造函數(shù),那么必須顯式地調(diào)用超類的其他構(gòu)造函數(shù)。