在繼承中重寫方法時丟擲異常的問題

2021-08-02 07:28:20 字數 937 閱讀 9453

父類有方法fun(),子類重寫了該方法。

父類的方法需要丟擲異常,子類的方法是否要同樣丟擲異常?丟擲同樣的異常?能否丟擲父類沒有的異常?還是一定要丟擲父類所丟擲異常範圍內的異常?

記住兩句話:

1. 子類重寫父類方法要丟擲與父類一致的異常,或者不丟擲異常

2. 子類重寫父類方法所丟擲的異常不能超過父類的範疇

下面的寫法是沒有問題的。父類丟擲的異常包含所有異常。

class

a

} class

bextends

a

}

下面寫法是出錯的,子類ioexception超過了父類的異常範疇

class

a

} class

bextends

a

}

下面沒有出錯。runtimeexception不屬於ioe的範疇,也就是超過了父類的異常範疇但是為什麼這樣的寫法沒有錯誤?

class

a

} class

bextends

a

}

runtimeexception, arithmeticexception異常是執行期異常,子類重寫的方法可以丟擲任何執行期異常。

重寫方法一定不能拋出新的檢查異常或者比被重寫方法申明更加寬泛的檢查型異常。

例如:

父類的乙個方法申明了乙個檢查異常ioexception,在重寫這個方法是就不能丟擲exception,只能丟擲ioexception的子類異常,可以丟擲非檢查異常。

error和runtimeexception及其子類成為未檢查異常(unchecked),其它異常成為已檢查異常(checked)

**:

在繼承中重寫方法時丟擲異常的問題

在繼承中重寫方法時丟擲異常的問題 父類有方法fun 子類重寫了該方法。父類的方法需要丟擲異常,子類的方法是否要同樣丟擲異常?丟擲同樣的異常?能否丟擲父類沒有的異常?還是一定要丟擲父類所丟擲異常範圍內的異常?記住兩句話 1,子類重寫父類方法要丟擲與父類一致的異常,或者不丟擲異常 2,子類重寫父類方法所...

在Spring Filter中丟擲異常的一種辦法

先說辦法,如果看官覺得合適再往下看原理吧 步驟 filter restcontroller public class filtercontroller request.setattribute code request.getrequestdispatcher filter login auth f...

java方法重寫時的異常限制

1.子類在重寫父類的具有異常宣告的方法時,要麼不拋異常,要麼就丟擲跟父類方法相同的異常或該異常的子類。2.子類在重寫父類的具有異常宣告的方法的同時,又去實現了具有相同方法名稱的介面且該介面中的方法也具有異常宣告,則子類中的重寫的方法,要麼不丟擲異常,要麼丟擲父類中方法宣告異常與介面中方法宣告的異常的...