父类有方法fun(),子类重写了该方法。
父类的方法需要抛出异常,子类的方法是否要同样抛出异常?抛出同样的异常?能否抛出父类没有的异常?还是一定要抛出父类所抛出异常范围内的异常?
记住两句话:
1,子类重写父类方法要抛出与父类一致的异常,或者不抛出异常
2,子类重写父类方法所抛出的异常不能超过父类的范畴
class A {
public void fun() throws Exception {
}
}
class B extends A {
public void fun() throws IOException, RuntimeException {
}
}
这样的写法是没有问题的。父类抛出的异常包含所有异常。
class A {
public void fun() throws RuntimeException {
}
}
class B extends A {
public void fun() throws IOException, RuntimeException {
}
}
这样写法是出错的,子类IOException超过了父类的异常范畴
class A {
public void fun() throws IOException {
}
}
class B extends A {
public void fun() throws IOException, RuntimeException, ArithmeticException {
}
}
这样的写法没有出错。RuntimeException不属于IoE的范畴,也就是超过了父类的异常范畴但是为什么这样的写法没有错误?
RuntimeException
RuntimeException