当前位置: 首页 > 面试题库 >

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

蓟浩旷
2023-03-14
问题内容

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


问题答案:

Java支持*协变返回类型的重写方法。这意味着重写的方法可能具有更特定的返回类型。也就是说,只要新的返回类型可分配给你要覆盖的方法的返回类型,就可以使用。

例如:

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

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

这在Java语言规范的8.4.5节中指定:

如果返回类型是引用类型,则返回类型在彼此覆盖的方法之间可能会有所不同。返回类型可替换性的概念支持协变返回,即返回类型到子类型的特殊化。

当且仅当满足以下条件时,返回类型为R1的方法声明d1才可以替换为返回类型为R2的另一个方法d2:

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

- 如果R1是原始类型,则R2与R1相同。

- 如果R1是引用类型,则:

- R1是R2的子类型,或者R1可以通过未经检查的转换(第5.1.9节)转换为R2的子类型,或者

  • R1 = | R2 |


 类似资料:
  • 重写的方法可以有不同的返回类型吗?

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

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

  • 我正在尝试实现和重写具有不同返回类型的方法,而不会被迫转换返回类型。 我的问题:是否可以在不强制强制转换的情况下返回不同的类型?解决这个问题的抽象方法看起来怎么样? 我认为必须有一个解决方案,因为编译器应该知道返回类型...

  • 在执行基本方法重载程序时,我始终收到以下错误: sh-4.3 $ javac HelloWorld . Java < br > HelloWorld . Java:10:错误:方法show()已在类hello world中定义< br > static void show()< br > hello world . Java:25:错误:方法show(int,int)已在类hello world中

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