java什么是構造函數
java什么是構造函數
構造函數 ,是一種特殊的方法。主要用來在創建對象時初始化對象, 即為對象成員變量賦初始值,總與new運算符一起使用在創建對象的語句中。特別的一個類可以有多個構造函數 ,可根據其參數個數的不同或參數類型的不同來區分它們 即構造函數的重載。
Java 在創建對象的時候會要執行它的構造函數。不僅如此,Java 還要執行父類的構造函數,往上一級一級直到沒有父類為止。對于初學者來說,有三個問題不容易搞懂:
1、父類的構造函數是否一定會執行?
2、是先執行子類的構造函數還是先執行父類的構造函數?
3、如果父類有多個構造函數,那么 Java 會選擇哪一個?
- 父類的構造函數是否一定會執行?
是的,父類的構造函數一定會執行。所以如果某個類的層次很深,那么它創建對象時就會要執行一大堆的構造函數。
- 是先執行子類的構造函數還是先執行父類的構造函數?
Java 會順著繼承結構往上一直找到 Object,然后從 Object 開始往下依次執行構造函數。先執行父類的構造函數,那么子類的構造函數執行的時候就不需要擔心父類的成員是否初始化好了。
- 如果父類有多個構造函數,那么 Java 會選擇哪一個?
如果父類有多個構造函數,那么子類可以在構造函數中選擇其中一個(且最多只能選擇一個)來執行。如果子類沒有選擇,那么 Java 將會執行父類的缺省構造函數。下面是一個例子:
父類:
public class SuperClass {
public SuperClass() {
System.out.println("super class constructed.");
}
public SuperClass(String name) {
System.out.println("super class constructed with name: " + name);
}
}
子類:
public class SubClass extends SuperClass {
public SubClass() {
System.out.println("sub class constructed.");
}
public SubClass(String name) {
super(name);
System.out.println("sub class constructed with name: " + name);
}
public static void main(String[] args) {
new SubClass();
new SubClass("world");
}
}
執行結果:
super class constructed.
sub class constructed.
super class constructed with name: world
sub class constructed with name: world
如果去除SubClass中的super(name)的話,輸出將是:
super class constructed.
sub class constructed.
sub class constructed with name: world
這說明創建子類object時只有默認constructed會向下執行/初始化,其他constructed需要使用super關鍵字才可以實現