看下面的一段java程序,
public class Parent{
public Parent(int i)
{
}
public Parent(String name)
{
}
}
public class Son extends Parent
{
public Son(int i)
{
}
public Son()
{
}
public Son(String name)
{
}
}
假如我們調用子類Son的任何一個構造函數new Son();會出錯嗎? 答案是運行時會出錯,為什么呢?
因為要創建Son的實例,調用子類的構造函數會先調用父類Parent的構造函數,那么父類那么多構造函數
會調用哪一個呢?答案是無參的那個構造函數(和缺省構造函數相同),但是父類并沒有這么一個無參的
構造函數,所以就會出錯。有的同學可能要問,父類不是有缺省構造函數嗎?這個問題問到了關鍵,關鍵
是如果父類有其他的構造函數,java編譯器就不會為它自動生成一個缺省構造函數,這也是為什么這個構造
函數叫缺省構造函數的原因,缺省的意思在于如果一個構造函數都沒有的情況下編譯器自動生產的構造函數