Java 泛型方法重写其基的泛型方法
假设Java 泛型方法重写其基的泛型方法,java,generics,Java,Generics,假设 我们有两个类:A和B,它们扩展了A 我们为它们提供了两个包装类:AWrapper和BWrapper,它们BWrapper扩展了AWrapper AWrapper.java class AWrapper { public <T extends A> void wrap(T obj) {} } class BWrapper extends AWrapper { @Override // This doesn't override! why? publi
- 我们有两个类:
和A
,它们扩展了B
A
- 我们为它们提供了两个包装类:
和AWrapper
,它们BWrapper
扩展了BWrapper
AWrapper
class AWrapper {
public <T extends A> void wrap(T obj) {}
}
class BWrapper extends AWrapper {
@Override // This doesn't override! why?
public <T extends B> void wrap(T obj) {}
}
Awraper类{
公共void wrap(T obj){}
}
BWrapper.java
class AWrapper {
public <T extends A> void wrap(T obj) {}
}
class BWrapper extends AWrapper {
@Override // This doesn't override! why?
public <T extends B> void wrap(T obj) {}
}
BWrapper类扩展了AWrapper类{
@覆盖//这不会覆盖!为什么?
公共void wrap(T obj){}
}
问题:为什么我们不能在BWrapper.java中泛化重写
wrap
方法?您的两个泛型参数(均命名为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) {}
}
class A{}
类B扩展了{}
AWrapper类{
公共void wrap(T obj){}
}
BWrapper类扩展了AWrapper{
@凌驾
公共void wrap(T obj){}
}
我认为,因为在A型振打器中T是A型,在B型振打器中T是B型,所以我认为B型振打器应该扩展A@GilGoldzweig是的,但仍然没有重写。您正在运行哪个java版本?因为AWrapper
的wrap
返回a
的子类型,因此必须重写子类。B如何在代码中扩展A
?