Java Generics - 方法覆盖

20 java generics

我有一对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中获得完整的答案.