泛型方法是否覆盖java中fathers类的非泛型方法

yv5phkfx  于 2023-04-19  发布在  Java
关注(0)|答案(1)|浏览(137)
class A123 {
    public void foo(String str) {
        System.out.println("1");
    }
}

class B123 extends A123 {
    
    public <T> void foo(T item) {
        System.out.println("2");
    }
}

我认为,当运行以下内容时:

public class Test123 {
    public static void main(String[] args){
        B123 b = new B123();
        b.foo("test");
    }
}

我认为通过向www.example.com发送一个字符串b.foo,编译器将“String”类型放在T中,然后它将被重写,b.foo(“test”)将打印2,但实际上它打印“1”。为什么?
更重要的是:如果我有相反的-

class A123 {
    public <T>void foo(T item) {
        System.out.println("1");
    }
}

class B123 extends A123 {
    public void foo(String str) {
        System.out.println("2");
    }
}

我跑:

public class Test123 {
    public static void main(String[] args){
        A123 b = new B123();
        b.foo("test");
    }
}

(我有一个指向B的A123指针),所以B123中的foo不会覆盖A中的foo,并且打印“1”。

uelo1irk

uelo1irk1#

编译器选择匹配的 * 最具体的 * 方法签名。
在这里,String是尽可能具体的。当然比T更具体,T可以匹配任何东西。

相关问题