ᆼᆺᆼ*_*ᆼᆺᆼ 1 java oop generics inheritance
为什么这段代码打印2.0而不是1.0?
abstract class B<T extends Number> {
abstract Number f(T j);
}
class A<T extends Number> extends B<T> {
public Number f(Float j) {
return 1f;
}
public Number f(T j) {
return j;
}
}
public class J {
public static void main(String[] args) {
B<Float> a = new A<>();
Number r = a.f(2f);
System.out.println(r);
}
}
Run Code Online (Sandbox Code Playgroud)
你在期待什么 您只有一个在B类中声明的方法:
abstract Number f(T j);
Run Code Online (Sandbox Code Playgroud)
A类中的方法
public Number f(Float j);
Run Code Online (Sandbox Code Playgroud)
不会覆盖前者.他们有不同的签名.所以方法
public Number f(T j) {
return j;
}
Run Code Online (Sandbox Code Playgroud)
被叫.