Java 异常 重写方法时抛出异常
Posted 王景迁
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 异常 重写方法时抛出异常相关的知识,希望对你有一定的参考价值。
注意:
子类重写父类方法时要抛出与父类一致的异常,或者不抛出异常。
子类重写父类方法所抛出的异常不能超出父类的范畴。
重写方法不能抛出新的受检异常或者比被重写方法更加宽泛的受检异常,可以抛出非受检异常(父类只抛出受检异常情况下)。例如:父类的一个方法抛出了一个受检异常IOException,重写该方法时不能抛出Exception,只能抛出IOException的子类异常,也可以抛出非受检异常。Error和RuntimeException及其子类属于非受检异常(unchecked),其它异常属于受检异常(checked)。
1 class A {
2 public void fun() throws Exception {
3
4 }
5 }
6 class B extends A {
7 public void fun() throws IOException, RuntimeException {
8
9 }
10 }
父类抛出的异常包含所有异常,上面的写法正确。
1 class A {
2 public void fun() throws RuntimeException {
3
4 }
5 }
6 class B extends A {
7 public void fun() throws IOException, RuntimeException {
8
9 }
10 }
子类IOException超出了父类的异常范畴,上面的写法错误。
1 class A {
2 public void fun() throws IOException {
3
4 }
5 }
6 class B extends A {
7 public void fun() throws IOException, RuntimeException, ArithmeticException {
8
9 }
10 }
RuntimeException不属于IO的范畴,超出了父类的异常范畴。RuntimeException和ArithmeticException属于运行时异常,子类重写的方法可以抛出任何运行时异常。所以上面的写法正确。
参考资料
以上是关于Java 异常 重写方法时抛出异常的主要内容,如果未能解决你的问题,请参考以下文章