如果重写方法的返回类型是原始的(例如double),我们可以更改重写方法的返回类型(例如int,char)吗?

时间:2014-01-29 19:16:08

标签: java polymorphism method-overriding

如下图所示:

要覆盖的方法:

double add (int a ,int b){  

} 

方法覆盖上述方法:

int add(int a,int b){

}  

3 个答案:

答案 0 :(得分:8)

对于原始类型,它是不可能的,但JDK 1.5中添加了一个名为covariant return types的功能。因此,使用此功能,子类可以返回比父类声明的类型更具体的类型。

以下代码在JDK 1.7中编译良好

public static class A {
   Number go() { return 0; };
}

public static class B extends A {
  @Override
  Integer go() { return 0; }
}

请参阅JLS Example 8.4.8.3-1. Covariant Return Types

答案 1 :(得分:2)

不,您无法更改返回类型。您可以通过提供备用或附加输入来重载方法。

int add(int a, int b, int c)

答案 2 :(得分:1)

另一个解决方案是使基类型成为参数化类型,并在扩展或实例化时断言返回类型。