请考虑以下代码:
public interface I1 {
public void bar1() throws IOException;
}
public interface I2 extends I1 {
public void bar2() throws Exception;
}
public interface I3 {
public void bar3() throws Exception;
}
public abstract class A implements I2 {
public void bar2() throws Exception{};
public void bar3() throws Exception{};
protected abstract void bar4();
protected void bar5() {};
}
现在,我创建了一个类,B如下:
public class B extends A implements I3 {
@Override
protected void bar4() {}
public void bar1() {}
}
为什么编译器让我这样做?我的意思是,不应该是:
public void bar1()抛出IOException;
最佳答案 覆盖时,不能抛出更大或更新的异常.不允许抛出超类方法的异常.
重写方法不得抛出新的或更广泛的已检查异常,而不是重写方法声明的异常.例如,声明FileNotFoundException的方法不能被声明SQLException,Exception或任何其他非运行时异常的方法覆盖,除非它是FileNotFoundException的子类.