【发布时间】:2015-03-27 18:28:57
【问题描述】:
我有一对 ClassA 和 ClassB 如下所示。
案例一:
class ClassA<T extends Number>{
void method(T t){}
}
class ClassB extends ClassA<Integer>{
@Override
void method(Integer i){}
}
案例2:
class ClassA{
void method(Number t){}
}
class ClassB extends ClassA{
@Override
void method(Integer i){}
}
我有两个问题。
[q1]
我这样说对吗,case2 是 case1 的运行时表示(类型擦除后)?
[q2] 如果我对 [q1] 的看法是正确的,那么为什么 case1 被接受为有效的覆盖? (我知道为什么 case2 不是有效的覆盖,因为参数不一样。)
请有人对此有所了解。 提前致谢。
【问题讨论】:
-
在
case 1中,指定T为Integer,因此用T = Integer覆盖是有效的。但是Number不是Integer,如果它是<? extends Number>就可以了。或者至少这可能有效,我需要检查一下。