public class FF {
}
class SS extends FF{
public SS (int a,int b){
//do something
}
}
上面的代碼沒有問題。
public class FF {
public FF(int a){}
}
class SS extends FF{
}
對於上面的代碼,編譯是會出問題的,出什麼問題?
Implicit super constructor FF() is undefined for default constructor. Must define an explicit constructor
什麼意思?
我們知道,ss繼承了ff,那麼在構造ss之前,就會先構造ff。
ss沒有人爲指定的構造函數,因此new SS的時候就用的是默認的構造函數,而子類默認的構造函數調用的也是父類默認的構造函數。
但是父類有了人爲指定的構造函數,就覆蓋了本身自動生成的默認無參構造函數,換言之,父類沒有無參構造函數,那麼就出錯了。
public class FF {
public FF(int a){}
}
class SS extends FF{
public SS(String a){
System.out.println("llll");
}
}
上面的代碼還是會出錯,爲什麼?
因爲不管子類的構造函數是什麼樣的形式,都會默認調用父類的默認的無參的構造函數。
上面的情況父類依然沒有構造函數。
那怎麼辦?
或者
public class FF {
//去掉構造函數
}
class SS extends FF{
public SS(String a){
System.out.println("llll");
}
}
或者
public class FF {
public FF(int a){}
}
class SS extends FF{
public SS(int a){
//指定要調用父類的某個構造函數
super.(a);
System.out.println("llll");
}
}
哎 感覺幾年的java白學了。
感謝交大的張晨同學。