首页 >Java >java教程 >Java 中的重写方法何时可以具有不同的返回类型?

Java 中的重写方法何时可以具有不同的返回类型?

Barbara Streisand
Barbara Streisand原创
2024-12-02 19:03:14315浏览

When Can Overriding Methods in Java Have Different Return Types?

方法重写中的协变返回类型

如果满足某些条件,Java 中的重写方法的返回类型可以不同。具体来说,Java 支持协变返回类型,允许重写方法具有比它所重写的方法更具体的返回类型。

根据 Java 语言规范 (JLS) 第 8.4.5 节,这是允许的,只要遵循以下规则:

  • 如果原始方法返回 void,则重写方法也必须返回void.
  • 如果原始方法返回原始类型,则重写方法必须返回相同的原始类型。
  • 如果原始方法返回引用类型:

    • 重写方法的返回类型必须是原始方法返回的子类型
    • 或者,重写方法的返回类型可以由原始方法的返回类型的未经检查的转换产生,或者
    • 重写方法的返回类型可以是原始方法的返回类型的擦除(泛型类型参数之后

例如,请考虑以下代码:

class ShapeBuilder {
    ...
    public Shape build() {
        ....
    }
}

class CircleBuilder extends ShapeBuilder{
    ...
    @Override
    public Circle build() {
        ....
    }
}

在此示例中,CircleBuilder 中的 build() 方法覆盖了 build( ) ShapeBuilder 中的方法。重写方法的返回类型是 Shape,而重写方法的返回类型是 Circle,它是 Shape 的子类型。这是 Java 协变返回类型规则所允许的。

以上是Java 中的重写方法何时可以具有不同的返回类型?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn