java规定
子类重写父类方法时,不能够声明抛出比父类类型更多、范围更大的异常,大致意思可以理解成:子类方法只能声明抛出父类方法抛出的异常。
案例
interface Type1 {
void test() throws ClassNotFoundException;
}
interface Type2 {
void test() throws NoSuchMethodException;
}
public class Test implements Type1,Type2{
@Override
public void test() throws NoSuchMethodException,ClassNotFoundException {
...
}
}
代码出现异常,我们删除NoSuchMethodException之后的效果
解决
可以看到依旧报错,只有删除了抛出的异常,编译才能够通过
由于Test类实现了Type1和Type2,所以需要同时实现两个接口中的test方法,只能是上面两种声明抛出的交集,不能声明抛出任何其他异常。