为什么重写方法不能抛出比重写方法更宽的异常?

为什么重写方法不能抛出比重写方法更宽的异常?

我正在阅读Kathe塞拉利昂的SCJP 6(SCJP 6)一书,并偶然发现了在重写的方法中抛出异常的解释。我完全不明白。有人能给我解释一下吗?

重写方法不得抛出新的或比重写的方法声明的异常范围更广的检查异常。例如,声明FileNotFoundException的方法不能被声明SQLException、异常或任何其他非运行时异常的方法覆盖,除非它是FileNotFoundException的子类。


ibeautiful
浏览 814回答 3
3回答

胡子哥哥

重写方法可以抛出任何未经检查的(运行时)异常,而不管重写的方法是否声明异常。例子:class Super {     public void test() {         System.out.println("Super.test()");     }}class Sub extends Super {     @Override     public void test() throws IndexOutOfBoundsException {         // Method can throw any Unchecked Exception         System.out.println("Sub.test()");     }}class Sub2 extends Sub {     @Override     public void test() throws ArrayIndexOutOfBoundsException {         // Any Unchecked Exception         System.out.println("Sub2.test()");     }}class Sub3 extends Sub2 {     @Override     public void test() {         // Any Unchecked Exception or no exception         System.out.println("Sub3.test()");     }}class Sub4 extends Sub2 {     @Override     public void test() throws AssertionError {         // Unchecked Exception IS-A RuntimeException or IS-A Error         System.out.println("Sub4.test()");     }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java