2 回答

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

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