java異常類子類和父類的關系


原文章:

java異常類子類和父類的關系

https://www.cnblogs.com/xiaoliangyuu/p/5596008.html

 

在java 中,當我們子類要重寫父類中的方法,如果父類的方法有異常聲明,那么子類重寫這個方法時候,所要聲明的異常不應該比父類的大。只能是小等,或者可以沒有。原因如下。
假如我們自定意義一個異常:

 

public class MyException extends Exception {
public MyException(String message) {}
public MyException() {}
}

那么我們有一個父類它將有一個方法,將聲明拋出這個異常。我們把它做成抽象的(無所謂)

 

public abstract class ParentException {
public abstract void test() throws MyException;
}

 

那么將有一個類使用到上面這個類

 

public class ExceptionTest {
private ParentException exception;
public ExceptionTest(ParentException exception){
this.exception=exception;
}
public void app(){
try {
exception.test();
} catch (MyException e) {
e.printStackTrace();
}
}
}

 

對於以上的try~catch 我們就直接捕獲MyException異常。這是正確的,它在編譯的時候是沒有問題的。
假如,有一個ParentException的有一個子類

 

public class ChildException extends ParentException{
public void test() throws Exception{ }
}

 

他的方法可以聲明拋出比父類大的異常,假如它是正確的。
那么問題來了。當我們執行ExceptionTest類的時候,我們以這個子類做為對象傳進去。
exception.test();這個地方將在運行的時候實際調用的是ChildException這個子類的test()方法,而它的聲明拋 出卻是比父類大的異常,這就使得在ExceptionTest類中,捕獲異常處出現了毛病,因為它無法捕獲Exception異常。
綜上所訴,子類重寫父類的方法時候不能聲明拋出比父類大的異常

0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM