如何 return 子 class 对象而不是基础 class 对象

How to return child class object intead of base class object

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 
{

} 

这给出了一个编译器错误,指出试图使用不兼容的 return 类型。我不能这样做吗?有什么建议可以避免这个错误吗?

我已经复制了您的代码,并 运行 使用 Java jdk8u45 复制了它,它工作得很好。换句话说,当覆盖一个方法时,可以将 return 类型更改为原始 return 类型的子类。

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

但是您的代码中有一个小错误,应该是:

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

希望我能帮到你, 最佳 Y