Exception在方法继承中的限制
生活随笔
收集整理的這篇文章主要介紹了
Exception在方法继承中的限制
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題:
父類或接口中定義了方法應該拋出的異常,那么當子類重寫方法時應該怎樣定義將要拋出的異常:
首先定義異常和父類:
1 class Exception1 extends Exception {} 2 class Exception2 extends Exception {} 3 class Exception3 extends Exception {} 4 class Exception1_1 extends Exception1 {} 5 class Exception2_1 extends Exception2 {} 6 class Exception3_1 extends Exception3 {} 7 class SuperClass { 8 public void method1() throws Exception1 , Exception2 , Exception3 {} 9 }正確的方法覆蓋:
1. 子類方法只能拋出父類異常的子集合:
1 public class TestExceptionLimit extends SuperClass { 2 @Override 3 public void method1() {} 4 } public class TestExceptionLimit extends SuperClass {@Overridepublic void method1() throws Exception1 {} } 1 public class TestExceptionLimit extends SuperClass { 2 @Override 3 public void method1() throws Exception1 , Exception2 , Exception3 {} 4 }上面三種都可以。
2. 子類可以拋出父類異常的導出類:
1 public class TestExceptionLimit extends SuperClass { 2 @Override 3 public void method1() throws Exception1_1 , Exception2_1 {} 4 }3. 還有一種特殊的情形,當子類同時繼承一個父類和實現一個接口,而且這個父類和接口同時定義了簽名一樣的方法,但是拋出異常不一樣,那么子類應該怎樣定義自己的方法異常:
新的代碼:
1 class Exception4 extends Exception {} 2 class Exception5 extends Exception {} 3 4 class SuperClass { 5 public void method1() throws Exception4{} 6 } 7 interface TestInterface { 8 public void method1() throws Exception5 ; 9 }正確的覆蓋:
1 public class TestExceptionLimit extends SuperClass implements TestInterface { 2 @Override 3 public void method1(){} 4 }注意:不要拋出任何異常,下面可以證明:
1 public class TestExceptionLimit extends SuperClass implements TestInterface { 2 @Override 3 public void method1() throws Exception4 {} 4 }這段代碼編碼會出錯,錯誤信息為:Exception Exception4 is not compatible with throws clause in TestInterface.method1()。表示和接口定義的異常不匹配,如果你嘗試拋出Exception5它又會告訴你和父類定義的異常不匹配,所以不寫還不行嘛--!,Java設計者們還是挺人性化的~~~
?
轉載于:https://www.cnblogs.com/caiyao/p/4736973.html
總結
以上是生活随笔為你收集整理的Exception在方法继承中的限制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP中的加强型接口Traits
- 下一篇: hdu 2602 Bone Collec