在重写时,父子层次结构在抛出时是否重要。

时间:2016-11-06 17:52:58

标签: java oop exception polymorphism override

请在下面找到我的代码,我希望在覆盖抛出异常时清除我的概念。以下将提供代码工作,如果是,那么为什么。我问的是这个问题,因为IOException和ArithmeticException之间没有直接的父子关系。

public class TestExceptionChild {

    public static void main(String[] args) {
        Parent parent = new Child();
        try {
            parent.msg();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

class Parent{  
    void msg() throws IOException{
        System.out.println("parent");
    }  
}

class Child extends Parent{  
    void msg() throws ArithmeticException{
        System.out.println("child");
    }  
}

1 个答案:

答案 0 :(得分:1)

这样可行,但只是因为ArithmeticException扩展RuntimeException(即它不是一个经过检查的异常,所以此处不需要使用throws子句)。如果使用已检查的异常而不是ArithmeticException,则必须是或扩展类型IOException。否则,您将收到编译错误。

所以要回答你的问题,是的,层次结构对已检查的例外非常重要。有关详细信息,请参阅here