方法覆寫(xiě)的原則(一同兩小一大)
一同:方法簽名必須相同
兩小:子類(lèi)方法聲明的返回值類(lèi)型是和父類(lèi)方法的返回值相同或者是其子類(lèi)
子類(lèi)方法拋出的異常類(lèi)型和父類(lèi)方法聲明拋出的異常類(lèi)型相同或是其子類(lèi)
一大:子類(lèi)方法的訪問(wèn)權(quán)限比父類(lèi)方法訪問(wèn)權(quán)限相等或更大.
判斷是否是覆寫(xiě)方法的必殺技:@Override標(biāo)簽;
若方法是覆寫(xiě)方法,在方法前貼上該標(biāo)簽,編譯通過(guò),否則編譯出錯(cuò).
看如下代碼:
superCLass clz = new subClass();
clz.doWork(),究竟會(huì)產(chǎn)生什么情況呢?
注意clz的編譯類(lèi)型是superClass堤魁,真是類(lèi)型是subClass
1.父類(lèi)存在該方法越庇,而且沒(méi)被private修飾,換句話(huà)說(shuō)能被繼承。會(huì)執(zhí)行父類(lèi)的方法
2.父類(lèi)中沒(méi)有該方法,子類(lèi)中有該方法。編譯出錯(cuò)袋励,因?yàn)榫幾g器回去檢查聲明類(lèi)型中即父類(lèi)有沒(méi)該方法,沒(méi)有則報(bào)錯(cuò)。
3.父類(lèi)和子類(lèi)都有該方法插龄,多態(tài)愿棋,運(yùn)行時(shí)表現(xiàn)出子類(lèi)的具體特征,也就是調(diào)用子類(lèi)的doWork()
3.父類(lèi)和子類(lèi)都有該方法均牢,而且是靜態(tài)的糠雨。此時(shí)會(huì)執(zhí)行父類(lèi)的方法。對(duì)象調(diào)用靜態(tài)方法徘跪,實(shí)際上還是類(lèi)名調(diào)用甘邀。clz的編譯類(lèi)型是superClass,所以執(zhí)行父類(lèi)的doWork()