子類繼承父類時,子類的異常不能大于父類
在java中,當我們子類要重寫父類中的方法,如果父類的方法有異常聲明,那么子類重寫這個方法時候,所要聲明的異常不應該比父類的大。只能是小等,或者可以沒有。原因如下。
假如我們自定意義一個異常:
那么我們有一個父類它將有一個方法,將聲明拋出這個異常。我們把它做成抽象的(無所謂)
那么將有一個類使用到上面這個類
對于以上的try~catch 我們就直接捕獲MyException異常。這是正確的,它在編譯的時候是沒有問題的。
假如,有一個ParentException的有一個子類
他的方法可以聲明拋出比父類大的異常,假如它是正確的。
那么問題來了。當我們執行ExceptionTest類的時候,我們以這個子類做為對象傳進去。
exception.test();這個地方將在運行的時候實際調用的是ChildException這個子類的test()方法,而它的聲明拋出卻是比父類大的異常,這就使得在ExceptionTest類中,捕獲異常處出現了毛病,因為它無法捕獲Exception異常。
綜上所訴,子類重寫父類的方法時候不能聲明拋出比父類大的異常
假如我們自定意義一個異常:
- public class MyException extends Exception {
- public MyException(String message) {
- }
- public MyException() {
- }
- }
public class MyException extends Exception { public MyException(String message) { } public MyException() { } }
那么我們有一個父類它將有一個方法,將聲明拋出這個異常。我們把它做成抽象的(無所謂)
- public abstract class ParentException {
- public abstract void test() throws 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();
- }
- }
- }
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{
- }
- }
public class ChildException extends ParentException{ public void test() throws Exception{ } }
他的方法可以聲明拋出比父類大的異常,假如它是正確的。
那么問題來了。當我們執行ExceptionTest類的時候,我們以這個子類做為對象傳進去。
exception.test();這個地方將在運行的時候實際調用的是ChildException這個子類的test()方法,而它的聲明拋出卻是比父類大的異常,這就使得在ExceptionTest類中,捕獲異常處出現了毛病,因為它無法捕獲Exception異常。
綜上所訴,子類重寫父類的方法時候不能聲明拋出比父類大的異常
本文由用戶 yanguz123 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!