当前位置: 首页 > 知识库问答 >
问题:

重写的方法可以在返回类型上不同吗?

莫乐
2023-03-14

重写的方法可以有不同的返回类型吗?

共有1个答案

步联
2023-03-14

Java支持重写方法的*协变返回类型。这意味着重写的方法可能具有更特定的返回类型。也就是说,只要新的返回类型可赋值给要重写的方法的返回类型,它就被允许。

例如:

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

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

Java语言规范第8.4.5节对此进行了规定:

>

  • 如果R1为空,则R2为空。

    如果R1是基元类型,则R2与R1相同。

    如果R1是参考类型,则:

    (“R2”指R2的擦除,如JLS第4.6节所定义。)

    *在Java 5之前,Java具有不变的返回类型,这意味着方法重写的返回类型需要与被重写的方法完全匹配。

  •  类似资料:
    • 问题内容: 重写的方法可以有不同的返回类型吗? 问题答案: Java支持*协变返回类型的重写方法。这意味着重写的方法可能具有更特定的返回类型。也就是说,只要新的返回类型可分配给你要覆盖的方法的返回类型,就可以使用。 例如: 这在Java语言规范的8.4.5节中指定: 如果返回类型是引用类型,则返回类型在彼此覆盖的方法之间可能会有所不同。返回类型可替换性的概念支持协变返回,即返回类型到子类型的特殊化

    • 问题内容: 我读过一本书,说如果签名相同,我可以覆盖一个方法。根据书中的方法签名是Method_Name + Parameters传递的。 根据这本书,我可以重写具有不同返回类型的方法。在Java中实际上是否可以覆盖具有不同返回类型的方法?因为我在网上进行了一些搜索,所以我发现有人说要覆盖方法,返回类型也应该相同。 根据这本书,它还说,当我们尝试重载具有相同方法名称和参数但返回类型不同的方法时,j

    • 我读过一本书,它说我可以覆盖一个方法,如果它有相同的签名。根据这本书,方法的签名是Method_Name参数传递。 根据这本书,我可以重写具有不同返回类型的方法。在Java中,是否可以用不同的返回类型重写方法?因为我在网上做了一些搜索,我发现有人说要覆盖一个方法,返回类型也应该相同。 根据这本书,它还说,当我们试图用相同的方法名和参数重载一个方法,但返回类型不同时,java会抛出编译错误,因为签名

    • 问题是,如果我执行上述^,以访问endpoint上的请求信息,则如果筛选器验证失败,我就不能再中止筛选器中的请求,因为我会得到以下错误: 似乎如果您在Jerseyendpoint上定义任何类型的参数,这些参数可以在ContainerRequestContext中访问,那么它将不允许您中止过滤器中的过滤器链。 一个解决方法(我还没有尝试过,但假设会成功)是这样做:如果过滤器验证失败,我可以只向请求添

    • 本文向大家介绍我们可以在Java中基于不同的返回类型但参数类型和数字相同的方法重载吗?,包括了我们可以在Java中基于不同的返回类型但参数类型和数字相同的方法重载吗?的使用技巧和注意事项,需要的朋友参考一下 当一个类具有两个或多个具有相同名称但参数不同的方法时,在基于传递的参数进行调用时,将调用相应的方法(或相应的方法主体将与调用行动态绑定)。这种机制称为方法重载。 示例 具有相同参数和不同返回类

    • 但是同时使用不同签名和不同返回类型的重载方法有什么问题呢?为什么这会产生错误?