Java 中的协变返回类型
在 Java 中,重写方法的返回类型可以是协变的,这意味着它可以返回更派生的方法类型而不是被重写的方法。但是,此规则不适用于重写方法引发的异常。
重写方法中的异常抛出限制
编译器对重写方法强制执行以下有关异常的限制处理:
说明
这些限制确保子类不能引入重写方法的接口的新的或更严重的检查异常。这对于多态性是必要的,因为它允许针对超类编写的代码适当地处理异常。
示例
考虑以下示例:
class A { public void foo() throws FileNotFoundException { // ... } } class B extends A { @Override public void foo() throws SQLException { // ERROR: broader checked exception // ... } }
在此示例中,类 A 定义了抛出 FileNotFoundException 的方法 foo。类 B 扩展了 A,尝试通过声明更广泛的检查异常 SQLException 来重写 foo。这是不允许的,因为它违反了异常抛出限制。
基本原理
编译器强制执行这些限制:
以上是Java 重写方法可以具有协变返回类型吗?异常处理有哪些限制?的详细内容。更多信息请关注PHP中文网其他相关文章!