【问题标题】:Can two overriding methods vary in return type in java?java中两个覆盖方法的返回类型可以不同吗?
【发布时间】:2015-12-22 11:42:41
【问题描述】:
class ab {   
    int add(int a, int b) {
        return a + b;
    }
}

class bc extends ab {
    String add(int a, int b) {
        return a + " " + b;
    }
}

如果我使用 JRE 5,这段代码会运行吗? JRE7 和 JRE8 会发生什么?

【问题讨论】:

标签: oop polymorphism overriding


【解决方案1】:

只有当它们相关时,您才能改变返回类型(或协变 使用严格的术语)。从广义上讲,这意味着一个可以引用转换到另一个:即一个是另一个的子类。

所以在你的情况下不是,因为 String 与 int 无关:int 是原始类型。

【讨论】:

  • 例如,从父类中的Object 到子类中的String 会起作用。
【解决方案2】:

如果您在子类中重新定义具有不同“返回”类型的方法,则除非返回类型相似(在您的示例中,一个是字符串,另一个是完全不同的整数,否则它不会被称为覆盖)数据类型,因此它不会被覆盖)。

示例: 超级班:

    public class mysuper
{
    byte  newfun(int a)
    { 
       return 11;
     }
}

子类:

    public class mysub
{

    int newfun(int b)
    { // this is over-riding,the body of the function is different and the return type is different but similar
      return 12;
     }

}

掩饰:

1.在over-riding中,函数返回类型完全相同或类似,只是body可能不同。

【讨论】:

  • “重载”意味着具有不同的参数签名。因此,问题中的示例将是“覆盖”(如果有效)。
  • 拥有完全不同的返回类型会使其过载!!
  • 不,您绝对可以用@Override String getX() 覆盖Object getX()。而且您不能通过在 Java 中仅使用两种不同的返回类型来重载方法。 Object getX(); String getX(); 不会编译
  • @Thilo 编辑了答案。非常感谢您告诉我。你太棒了!!
  • 这是一个非常古老的面试问题,所以 Mathews Mathai,我考虑这个 BUG 或者它会进入超载类别。因为这是在 Java 面试中被问到的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-30
  • 1970-01-01
  • 2015-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多