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
{
}
这会导致编译器错误,说明尝试使用不兼容的返回类型。我不能这样做。有什么建议可以避免这个错误?
答案 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