9 回答

TA貢獻(xiàn)3條經(jīng)驗(yàn) 獲得超4個(gè)贊
?java中每個(gè)類必須有一個(gè)構(gòu)造函數(shù),如果沒有顯示的聲明構(gòu)造函數(shù),那么編譯器會(huì)自動(dòng)加一個(gè)無參的構(gòu)造函數(shù)。當(dāng)顯示定義了帶參數(shù)的構(gòu)造函數(shù)之后,而沒有顯示的定義無參構(gòu)造函數(shù),那么這個(gè)類就沒有無參構(gòu)造函數(shù)了。
?子類繼承父類,必須在子類的構(gòu)造函數(shù)中調(diào)用父類的構(gòu)造函數(shù),如果子類的構(gòu)造函數(shù)中,沒有顯示的調(diào)用父類的構(gòu)造函數(shù),那么會(huì)自動(dòng)調(diào)用父類的無參數(shù)構(gòu)造函數(shù),如果父類沒有無參數(shù)構(gòu)造函數(shù),那么子類中必須顯示的調(diào)用父類的構(gòu)造函數(shù)(使用super關(guān)鍵字即可),而且必須是在構(gòu)造方法的第一個(gè)語句 中進(jìn)行調(diào)用。
????? ? PS:現(xiàn)在說說你的代碼的問題,父類Animal沒有顯示的定義無參構(gòu)造函數(shù),所以只有有參構(gòu)造函數(shù),子類必須調(diào)用父類的構(gòu)造方法(即父類的有參構(gòu)造方法),用來初始化父類。(子類在執(zhí)行過程中,先執(zhí)行父類,所以必須初始化父類的構(gòu)造器,避免出現(xiàn)錯(cuò)誤)。
//?父類Animal public?class?Animal?{ private?String?color; private?String?size; //?只定義了有參構(gòu)造函數(shù),未顯示定義無參構(gòu)造函數(shù) public?Animal(String?color,?String?size){ this.color?=?color; this.size?=?size; } } //?子類Dog繼承父類Animal class?Dog?extends?Animal(){ ????//?子類繼承父類,需要調(diào)用父類的構(gòu)造方法,使用super關(guān)鍵字即可 ????public?Dog(String?color,?String?size,?String?test)?{ super(color,?size);?//?必須放在第一個(gè)構(gòu)造函數(shù)第一行 } }
下面是你想達(dá)到的效果:
public?class?Animal?{ private?String?color; private?String?size; //?顯示定義無參構(gòu)造函數(shù) public?Animal(){} public?Animal(String?color,?String?size){ this.color?=?color; this.size?=?size; } } class?Cat?extends?Animal{ public?Cat(String?color,?String?size,?String?test){ super();?//?其實(shí)也是調(diào)用了父類的無參構(gòu)造方法,編譯器默認(rèn)調(diào)用而已,也可以不寫該super() } }

TA貢獻(xiàn)785條經(jīng)驗(yàn) 獲得超332個(gè)贊
父類中你沒有定義boolean song,所以報(bào)錯(cuò)...也是不滿足父類構(gòu)造器中沒有這個(gè)屬性。。。。

TA貢獻(xiàn)15條經(jīng)驗(yàn) 獲得超30個(gè)贊
子類不滿意父類的構(gòu)造器,想重新寫一個(gè)構(gòu)造器,但是必須要調(diào)用父類的構(gòu)造器,為什么必須要調(diào)用父類的構(gòu)造器,是不是你后面說的要先創(chuàng)建父類對(duì)象,調(diào)用父類的構(gòu)造器,然后再創(chuàng)建子類對(duì)象,調(diào)用子類的構(gòu)造器。那它干嘛不去父類里調(diào),要在子類里再寫一遍,還有既然是先調(diào)用父類構(gòu)造器,再調(diào)用子類構(gòu)造器,為什么我圖片中打印出來只有子類(我還以為是先打印父類再打印子類,不解)
添加回答
舉報(bào)