在下面的代码中,不允许MoreSpecificHasInfo.getInfo()
作为Sun Java 5/6编译器的覆盖,说“types IHasSpecialInfo and AbstractHasInfo are incompatible; both define getInfo(), but with unrelated return types
”,尽管它在Eclipse 3.4.2下编译时没有错误。另外,如果我用注释的具体版本替换getInfo()
的抽象实现,它在任何地方编译都很好。
我想知道哪些(如果有的话)Sun或Eclipse编译器与Java Language Spec一致,如果Sun的编译器是正确的,为什么不允许这样做?
interface IInfo {
}
interface ISpecialInfo extends IInfo {
}
interface IHasInfo {
IInfo getInfo();
}
interface IHasSpecialInfo extends IHasInfo {
ISpecialInfo getInfo();
}
abstract class AbstractHasInfo implements IHasInfo {
public abstract AbstractInfo getInfo();
abstract class AbstractInfo implements IInfo {
}
}
abstract class MoreSpecificHasInfo extends AbstractHasInfo implements IHasSpecialInfo {
@Override
abstract public MoreSpecificInfo getInfo();
// @Override
// public MoreSpecificInfo getInfo() {
// return null;
// }
abstract class MoreSpecificInfo extends AbstractHasInfo.AbstractInfo implements ISpecialInfo {
}
}