轉自:http://blog.csdn.net/ningbowxj3/article/details/1418939
JAVA繼承中對建構函式是不繼承的。
以下是例子:
public class FatherClass {
public FatherClass() {
System.out.println(100);
}
public FatherClass(int age) {
System.out.println(age);
}
}
public class SonClass extends FatherClass{
public SonClass() {
}
public SonClass(int c) {
System.out.println(1234);
}
public static void main(String[] args) {
FatherClass f = new FatherClass(28);
SonClass s = new SonClass(66);
}
}
編譯後執行結果如下是什麼呢?
分析:1. FatherClass f = new FatherClass(28);這句沒有必要解釋
2.SonClass s = new SonClass(66);執行這句時,調用
public SonClass(int c) {
System.out.println(1234);
}
在這個建構函式中,等價於
public SonClass(int c) {
super();//必須是第1行,否則不能編譯
System.out.println(1234);
}
所以結果是 100
1234
3.如果子類建構函式是這樣寫的
public SonClass(int c) {
super(22);//必須是第1行,否則不能編譯
//顯示調用了super後,系統就不再調用super();
System.out.println(1234);
}
執行結果是 22
1234
總結1:建構函式不能繼承,只是調用而已。
如果父類沒有無參建構函式
建立子類時,不能編譯,除非在建構函式代碼體中第一行,必須是第一行顯示調用父類有參建構函式
如下:
SonClass (){
super(777);//顯示調用父類有參建構函式
System.out.println(66);
}
如果不顯示調用父類有參建構函式,系統會預設調用父類無參建構函式super();
但是父類中沒有無參建構函式,那它不是不能調用了。所以編譯就無法通過了。