【发布时间】:2014-06-04 09:48:42
【问题描述】:
abstract class A {
abstract public void dosome(Class<? extends Number> c);
}
class B extends A {
@Override
public void dosome(Class<Number> c) {}
}
来自 Java 文档: 在类 C 中声明的实例方法 m1 覆盖在类 A 中声明的另一个实例方法 m2,前提是满足以下所有条件: ...... m1 的签名是 m2 签名的子签名(第 8.4.2 节)。
如果满足以下任一条件,方法 m1 的签名是方法 m2 签名的子签名: m1 的签名与 m2 签名的擦除(第 4.6 节)相同。
是A的擦除
dosome(Class<Number> c)?
如果是这样,有什么问题?
EDIT1: 或者如果我切换泛型类型:
abstract class A {
abstract public void dosome(Class<Number> c);
}
class B extends A {
@Override
public void dosome(Class<? extends Number> c) {}
}
在这种情况下有什么问题?
EDIT2:我知道如何修复它,但我想了解,根据 java 规则,在这种情况下有什么问题。
【问题讨论】:
标签: java generics overriding