如何返回基类对象的子类对象intead

时间:2016-01-22 07:26:08

标签: java abstraction

abstract class B
{

}

public abstract class A 
{
  public abstract B createBInstance();
}

public class C extends A {
  @Override
  public D createBInstance() {
    return new D;
  }
}

,其中

public class D extends B 
{

} 

这会导致编译器错误,说明尝试使用不兼容的返回类型。我不能这样做。有什么建议可以避免这个错误?

1 个答案:

答案 0 :(得分:0)

我已经复制了你的代码并使用Java jdk8u45运行它并且它运行得非常好。换句话说,当覆盖方法时,可以将返回类型更改为原始返回类型的子级。

另请参阅:Can overridden methods differ in return type?

但是代码中存在一个小错误,应该是:

public class C extends A {
   @Override
   public D createBInstance() {
       return new D(); //forgot parenthesis 
   }
}

希望我能提供帮助, 最好的Y