我有一对ClassA和ClassB类,如下所示.
情况1:
class ClassA<T extends Number>{
void method(T t){}
}
class ClassB extends ClassA<Integer>{
@Override
void method(Integer i){}
}
Run Code Online (Sandbox Code Playgroud)
案例2:
class ClassA{
void method(Number t){}
}
class ClassB extends ClassA{
@Override
void method(Integer i){}
}
Run Code Online (Sandbox Code Playgroud)
我这里有两个问题.
[q1]如果我这样说,我是对的,case2是case1的运行时表示(在类型擦除之后)?
[q2]如果我对[q1]是正确的,那么为什么case1被接受为有效覆盖?(我知道为什么case2不是有效的覆盖,因为参数不相同.)
有人请对此有所了解.提前致谢.
T.G*_*lle 19
[q1]的答案是否定的.编译器将生成一个实际上将覆盖的桥接方法.ClassBmethod(Number)
class ClassB extends ClassA{
// bridge method
void method(Number i){
method((Integer)i);
}
void method(Integer i){}
}
Run Code Online (Sandbox Code Playgroud)
您将在类型擦除的java doc中获得完整的答案.