關於Implicit super constructor is undefined. Must explicitly invoke another constructor

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白學了。
感謝交大的張晨同學。


 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章