關於Implicit super constructor FF is undefined Must explici
阿新 • • 發佈:2019-01-10
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
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白學了。
感謝交大的張晨同學。