2 回答

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超2個贊
代碼里面你的子類覆蓋了父類的show()方法,你用一個父類的引用指向一個子類的對象,如果子類中覆蓋了父類的show()方法,你就只能用子類覆蓋過的show()方法!
這個問題分幾種情況,現(xiàn)在就按情況來分析一下:
1、在子類中調(diào)用父類中被子類覆蓋的方法:
這個情況就是您說的用super來顯示的調(diào)用。因?yàn)樵谧宇愔羞€有一個和父類同樣的方法,如果你只寫方法名子,編譯器不可能知道你想要掉的是哪個方法,他自作聰明的回去調(diào)用子類當(dāng)中的那個。所以這種情況下,你要用super來顯示的說明你要調(diào)用的是父類中的方法!
2、在其他類中的調(diào)用父類方法:
這種情況就在簡單不過了。你創(chuàng)造(New出來的?。┑氖悄念悓ο螅ǜ割悓ο蠡蚴亲宇悓ο螅┧蜁フ{(diào)用父類或是子類中的相應(yīng)的方法,這個和多態(tài)不沖突!
3、靜態(tài)方法:
靜態(tài)方法的調(diào)用是和類綁定的,類的靜態(tài)方法又叫類方法,也就是這個方法是屬于這個類的,而不是屬于這個類創(chuàng)建出來的某個對象的。所以靜態(tài)方法的調(diào)用要用“類名.靜態(tài)方法名”來調(diào)用! 對了,靜態(tài)方法的調(diào)用是需要在另外一個靜態(tài)方法中的哦,否則編譯會錯誤的!

TA貢獻(xiàn)2021條經(jīng)驗(yàn) 獲得超8個贊
FatherException f=new SonException(); - 將子類向上轉(zhuǎn)型為父類,對于上轉(zhuǎn)型對象,若子類復(fù)寫了父類的方法,則仍然調(diào)用的是子類方法。
從更本質(zhì)的角度來說,對于類里面的非靜態(tài)方法,默認(rèn)會傳入this參數(shù),于是在方法里訪問其他非靜態(tài)方法時,實(shí)際這些被訪問的方法前面會有默認(rèn)帶上this,表示這個方法歸屬于哪個對象。
你可以在FatherException f=new SonException();下面加上這行代碼:
System.out.println(f);
就知道f所表示的實(shí)際對象了。
添加回答
舉報