看下面的一段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)
{
}
}
假如我們調(diào)用子類(lèi)Son的任何一個(gè)構(gòu)造函數(shù)new Son();會(huì)出錯(cuò)嗎? 答案是運(yùn)行時(shí)會(huì)出錯(cuò),為什么呢?
因?yàn)橐獎(jiǎng)?chuàng)建Son的實(shí)例,調(diào)用子類(lèi)的構(gòu)造函數(shù)會(huì)先調(diào)用父類(lèi)Parent的構(gòu)造函數(shù),那么父類(lèi)那么多構(gòu)造函數(shù)
會(huì)調(diào)用哪一個(gè)呢?答案是無(wú)參的那個(gè)構(gòu)造函數(shù)(和缺省構(gòu)造函數(shù)相同),但是父類(lèi)并沒(méi)有這么一個(gè)無(wú)參的
構(gòu)造函數(shù),所以就會(huì)出錯(cuò)。有的同學(xué)可能要問(wèn),父類(lèi)不是有缺省構(gòu)造函數(shù)嗎?這個(gè)問(wèn)題問(wèn)到了關(guān)鍵,關(guān)鍵
是如果父類(lèi)有其他的構(gòu)造函數(shù),java編譯器就不會(huì)為它自動(dòng)生成一個(gè)缺省構(gòu)造函數(shù),這也是為什么這個(gè)構(gòu)造
函數(shù)叫缺省構(gòu)造函數(shù)的原因,缺省的意思在于如果一個(gè)構(gòu)造函數(shù)都沒(méi)有的情況下編譯器自動(dòng)生產(chǎn)的構(gòu)造函數(shù)