假设
我们有两个类:A
和B
,其中B
扩展了A
。
我们为他们提供了两个 wrapper 类:AWrapper
和BWrapper
,其中BWrapper
扩展了AWrapper
。
AWrapper.java
class AWrapper {
public <T extends A> void wrap(T obj) {}
}
BWrapper.java
class BWrapper extends AWrapper {
@Override // This doesn't override! why?
public <T extends B> void wrap(T obj) {}
}
问题:为什么我们不能在BWrapper.java中一般地覆盖wrap
方法?
答案 0 :(得分:2)
您的两个通用参数(都名为T
)是不相关的,因为它们是在方法级别定义的。因此,您的BWrapper
方法不会覆盖同名的AWrapper
方法。
您可以在课程级别定义它们:
class A {}
class B extends A {}
class AWrapper<T extends A> {
public void wrap(T obj) {}
}
class BWrapper<T extends B> extends AWrapper<T> {
@Override
public void wrap(T obj) {}
}