为什么重写方法不能抛出比重写方法更宽的异常?我正在阅读Kathe塞拉利昂的SCJP 6(SCJP 6)一书,并偶然发现了在重写的方法中抛出异常的解释。我完全不明白。有人能给我解释一下吗?重写方法不得抛出新的或比重写的方法声明的异常范围更广的检查异常。例如,声明FileNotFoundException的方法不能被声明SQLException、异常或任何其他非运行时异常的方法覆盖,除非它是FileNotFoundException的子类。
3 回答
胡子哥哥
TA贡献1825条经验 获得超6个赞
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()"); }}
添加回答
举报
0/150
提交
取消