java - java中方法和构造函数中异常的继承

标签 java exception inheritance

我有代码:

class Father {
public Father() throws IOException {}
public void foo() throws IOException {}
}

class Child extends Father {
//If use FileNotFoundException here, compile fail
public Child() throws Exception {}  

//If use Exception here, compile fail
public void foo() throws FileNotFoundException {}
}

在编写子构造函数时,我们必须至少抛出父构造函数的异常或 super 异常(IOException -> Exception)。 但是,对于子方法,它必须抛出子异常(IOException -> FileNotFoundException)。 为什么会出现在Java中。请解释一下? 谢谢

最佳答案

如果您重写方法并且不调用 super 方法,则可能会缩小异常范围

public class Child {
    public void foo() throws FileNotFoundException {
         // overrides Parent.foo() throws IOException
    }
}

但在构造函数的情况下,会插入对父构造函数的隐式 super() 调用,因此子构造函数还必须至少声明父构造函数的所有已检查异常。

关于java - java中方法和构造函数中异常的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37156650/

相关文章:

java - 通过 ObjectInputStream 反序列化时出现 StreamCorruptedException

java - JPA 标准构建中的双方加入

java - 如何将值存储在二维数组中以供以后使用?

python - 如何使用openpyxl获取位置(行,列)单元格的值?

c# - 关闭 websocket 时出现 SignalR 错误 - 无效句柄

java - 如何使用 Struts 2 打印 List<Object[]>?

使用正确的remove()方法时显示java.util.ConcurrentModificationException

java - JAXB 编码子类继承

javascript - 如何在对象内使用 ajax 来填充对象的实例变量?

c++ - __vfptr 表在未删除的对象中损坏