【发布时间】:2015-05-22 07:56:11
【问题描述】:
我来自 .Net,对 Java 开发还很陌生,所以也许这是一个奇怪的问题:
我有一个类层次结构,例如:
Superclass implements GenericInterface<Superclass>
^
|
Subclass
GenericInterface 非常简单:
public interface GenericInterface<T> {
OtherGenericInterface<T> getOther();
}
而OtherGenericInterface终于使用了类型参数:
public interface OtherGenericInterface<T> {
List<Object> processType(T left, T right);
}
现在当我尝试在Superclass 中实现接口时,我只是返回一个匿名类型:
public class Superclass implements GenericInterface<Superclass> {
@Override
public OtherGenericInterface<Superclass> getOther() {
return new OtherGenericInterface<Superclass>() {
@Override
public List<Object> processType(T left, T right) {
...
}
};
}
}
到目前为止效果很好,但现在我尝试覆盖 Subclass 中的方法:
public class Subclass extends Superclass (implements GenericInterface<Subclass>) {
@Override
public OtherGenericInterface<Subclass> getOther() {
...
}
}
在那里,我不能用我更具体的返回类型覆盖该方法。即使我重新实现接口并将超类中的方法声明为 final 也是不可能的。
所以我的问题是:为什么OtherInterface<MoreSpecificType> 不是更具体的类型,或者至少不是相同的类型(由于类型擦除),因为这将是重写方法的要求吗?。
【问题讨论】:
-
OtherInterface<Subclass>不是OtherInterface<Superclass>的子类型,原因相同ArrayList<Integer>不是ArrayList<Object>的子类型 -
但它也不是同一类型?
-
没有?当然
OtherInterface<Subclass>与OtherInterface<Superclass>不是同一类型...
标签: java generics inheritance overriding