Java中關于子類覆蓋父類的拋出異常問題
Java中子類覆蓋父類方法拋出異常不能比父類多,這個表述不夠準確。
準確一點的描述為:
子類拋出的異常類型不能比父類拋出的異常類型更寬泛。假設父類拋出異常ParentException,另外有兩個子類繼承自ParentException分別為ChildException1, ChildException2, 那么 子類可以同時拋出異常ChildException1,ChildException2. 滿足“子類拋出的異常類型不能比父類拋出的異常類型更寬泛”,這一條件。
注意:
子類也可以選擇不進行拋出任何異常,即使他們是父類所定義的異常。
為什么Java設計成這樣,下面舉個例子進行分析:
package exceptions; class Sick extends Exception{} class FeverSick extends Sick{} class JointSick extends Sick{} class Children extends People{ public void coldAir() throws FeverSick{ } } class Adults extends People{ public void coldAir(){} } class Olds extends People{ public void coldAir() throws JointSick{ } } public class People { public void coldAir() throws Sick{ } }
如上代碼,定義了一個父類People
類,以及其三個子類Children
, Adults
, Olds
. 假設在父類中有一個冷空氣事件,那么它就會拋出一個Sick類型的異常。但是由于三個子類的抵抗疾病的能力不同,那么Adults類由于抵抗力較強,其方法可能不拋出異常。而Children和Adults類型,由于抵抗力較弱,可能拋出Sick類型的不同子類型。但是需要注意的是,子類不能拋出與Sick類完全不相關的異常類型,例如身高Height類型。因為必須把父類作為一個大前提,其子類不能拋出比父類異常更加出格的異常,否則無法進行識別。
大概就是這個意思。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內容請查看下面相關鏈接
- 淺談RxJava處理業(yè)務異常的幾種方式
- JAVA異常處理捕獲與拋出原理解析
- java拋出異常與finally實例解析
- JAVA拋出異常的三種形式詳解
- Java如何將處理完異常之后的程序能夠從拋出異常的地點向下執(zhí)行?
- Java拋出異常與自定義異常類應用示例
- java 拋出異常處理的方法
- 淺談java中異常拋出后代碼是否會繼續(xù)執(zhí)行
- 啟動tomcat時 錯誤: 代理拋出異常 : java.rmi.server.ExportException: Port already in use: 1099的解決辦法
- Java編程中使用throw關鍵字拋出異常的用法簡介
- Java 如何優(yōu)雅的拋出業(yè)務異常
相關文章
IDEA 2020 無法啟動的解決辦法(啟動崩盤)附IDEA 2020 新功能
這篇文章主要介紹了IDEA 2020 無法啟動的解決辦法(啟動崩盤)附IDEA 2020 新功能,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04使用@Value為靜態(tài)變量導入并使用導入的靜態(tài)變量進行初始化方式
這篇文章主要介紹了使用@Value為靜態(tài)變量導入并使用導入的靜態(tài)變量進行初始化方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02詳解springboot shiro jwt實現(xiàn)權限管理
為什么使用jwt呢,因為可以通過URL,POST參數(shù)或者在HTTP header發(fā)送,因為數(shù)據(jù)量小,傳輸速度也很快。本篇通過具體代碼來進行詳情解析,對大家的學習或工作具有一定的參考借鑒價值2021-09-09基于SpringBoot + Redis實現(xiàn)密碼暴力破解防護
在現(xiàn)代應用程序中,保護用戶密碼的安全性是至關重要的,密碼暴力破解是指通過嘗試多個密碼組合來非法獲取用戶賬戶的密碼,為了保護用戶密碼不被暴力破解,我們可以使用Spring Boot和Redis來實現(xiàn)一些防護措施,本文將介紹如何利用這些技術來防止密碼暴力破解攻擊2023-06-06