gpt4 book ai didi

Java 泛型 - 方法覆盖

转载 作者:IT老高 更新时间:2023-10-28 20:53:35 30 4
gpt4 key购买 nike

我有一对 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 不是有效的覆盖,因为参数不一样。)

请有人对此有所了解。提前致谢。

最佳答案

[q1] 的答案是否定的。编译器将在 ClassB 中生成一个 bridge 方法,该方法实际上将覆盖 method(Number)

class ClassB extends ClassA{
// bridge method
void method(Number i){
method((Integer)i);
}

void method(Integer i){}
}

您将在 java doc 中获得完整的答案关于类型删除。

关于Java 泛型 - 方法覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29296303/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com