泛型方法覆盖其基础的泛型方法

时间:2018-11-07 12:58:39

标签: java generics

假设

  • 我们有两个类:AB,其中B扩展了A

  • 我们为他们提供了两个 wrapper 类:AWrapperBWrapper,其中BWrapper扩展了AWrapper

    < / li>

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方法?

1 个答案:

答案 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) {}
}