原文章:
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
踩