gpt4 book ai didi

java - 泛型方法不覆盖父类(super class)中类似的泛型方法-> 使用哪一个?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:57:57 27 4
gpt4 key购买 nike

鉴于这种情况:

 public class Animal {

public <T> void genericMethod(T t){
System.out.println("Inside generic method on animal with parameter " + t.toString());
}
}

public class Cat extends Animal {

public <T extends Cat> void genericMethod(T t){
System.out.println("Inside generic method on cat with parameter " + t.toString());
}
}

public class Main {

public static void main(String[] args) {
Animal animal = new Animal();
Cat cat = new Cat();
cat.genericMethod(cat);
}
}

Cat 中的方法 genericMethod() 绝对不会覆盖父类(super class)方法(如果我添加 @Override 签名,编译器会提示) 这是合理的,因为对类型 T 的要求不同。

但是我不太明白,编译器是如何决定在main方法中调用cat.genericMethod(cat)时使用这两种方法中的哪一种。因为实际上这两种方法都是可见的并且都适用。我本来预计会出现像“模糊函数调用”这样的编译器错误。有人可以解释这种行为吗?

最佳答案

由于子类方法的泛型类型绑定(bind),这两个方法具有不同的删除。

对于父类(super class)方法的删除是:

public void genericMethod(Object t)

对于子类方法,删除是:

public void genericMethod(Cat t)

方法重载解析规则选择具有最佳匹配参数的方法。因此,当您传递 Cat 参数时,将选择第二个(子类)方法。

关于java - 泛型方法不覆盖父类(super class)中类似的泛型方法-> 使用哪一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48680108/

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