亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請問try {} catch(){}語句中的f調用的為什么是子類中的方法?

請問try {} catch(){}語句中的f調用的為什么是子類中的方法?

慕妹3146593 2022-02-18 17:11:28
package com.softeem.exceptions;import java.io.IOException;public class FatherException {public void show() throws IOException{System.out.println("父類");}}package com.softeem.exceptions;import java.io.IOException;public class SonException extends FatherException{//需將父類中的方法覆蓋//覆蓋時 如果父類方法拋出異常 但子類沒有 則沒有覆蓋// 若想要覆蓋父類方法 則同樣要拋出異常// 在子類 中拋出的異常要么和父類拋出的相同 要么是父類拋出異常的子類public void show(){System.out.println("子類");}public static void main(String args[]){FatherException f=new SonException();try {f.show();} catch (IOException e) {e.printStackTrace();}}}
查看完整描述

2 回答

?
慕尼黑5688855

TA貢獻1848條經驗 獲得超2個贊

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

查看完整回答
反對 回復 2022-02-21
?
寶慕林4294392

TA貢獻2021條經驗 獲得超8個贊

FatherException f=new SonException(); - 將子類向上轉型為父類,對于上轉型對象,若子類復寫了父類的方法,則仍然調用的是子類方法。
從更本質的角度來說,對于類里面的非靜態方法,默認會傳入this參數,于是在方法里訪問其他非靜態方法時,實際這些被訪問的方法前面會有默認帶上this,表示這個方法歸屬于哪個對象。

你可以在FatherException f=new SonException();下面加上這行代碼:
System.out.println(f);
就知道f所表示的實際對象了。

查看完整回答
反對 回復 2022-02-21
  • 2 回答
  • 0 關注
  • 154 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號