在java中,两种重写方法的返回类型是否有所不同?

时间:2015-12-22 11:42:41

标签: oop polymorphism override

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会发生什么?

2 个答案:

答案 0 :(得分:1)

如果它们相关(或协变以使用严格术语),则只能更改返回类型。从广义上讲,这意味着一个是可引用的另一个:即一个是另一个的子类。

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

答案 1 :(得分:0)

如果在子类中重新定义一个具有不同“返回”类型的方法,那么除非返回类型相似,否则不会调用它(在您的示例中,一个是字符串,另一个是int-完全不同数据类型,所以它没有超越)。

实施例: 超级课程:

    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.在覆盖中,函数返回类型完全相同或类似,只有正文可能不同。