子類繼承父類時,子類的異常不能大于父類

yanguz123 13年前發布 | 6K 次閱讀 云計算
在java中,當我們子類要重寫父類中的方法,如果父類的方法有異常聲明,那么子類重寫這個方法時候,所要聲明的異常不應該比父類的大。只能是小等,或者可以沒有。原因如下。
假如我們自定意義一個異常:
Java代碼 復制代碼 收藏代碼
  1. public class MyException extends Exception {    
  2. public MyException(String message) {    
  3. }    
  4. public MyException() {    
  5. }    
  6. }   



那么我們有一個父類它將有一個方法,將聲明拋出這個異常。我們把它做成抽象的(無所謂)
Java代碼 復制代碼 收藏代碼
  1. public abstract class ParentException {    
  2.    public abstract void test() throws MyException;    
  3. }   

那么將有一個類使用到上面這個類
Java代碼 復制代碼 收藏代碼
  1. public class ExceptionTest {    
  2.     private ParentException exception;    
  3.     public ExceptionTest(ParentException exception){    
  4.     this.exception=exception;    
  5.     }    
  6.     public void app(){    
  7.     try {    
  8.      exception.test();    
  9.      } catch (MyException e) {    
  10.      e.printStackTrace();    
  11.    }    
  12.     }    
  13. }   

對于以上的try~catch 我們就直接捕獲MyException異常。這是正確的,它在編譯的時候是沒有問題的。
假如,有一個ParentException的有一個子類
Java代碼 復制代碼 收藏代碼
  1. public class ChildException extends ParentException{    
  2. public void test() throws Exception{    
  3.   
  4. }    
  5. }   


他的方法可以聲明拋出比父類大的異常,假如它是正確的。
那么問題來了。當我們執行ExceptionTest類的時候,我們以這個子類做為對象傳進去。
exception.test();這個地方將在運行的時候實際調用的是ChildException這個子類的test()方法,而它的聲明拋出卻是比父類大的異常,這就使得在ExceptionTest類中,捕獲異常處出現了毛病,因為它無法捕獲Exception異常。
綜上所訴,子類重寫父類的方法時候不能聲明拋出比父類大的異常
 本文由用戶 yanguz123 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!