gpt4 book ai didi

java - 使用模板调用重载方法

转载 作者:行者123 更新时间:2023-11-30 03:04:53 25 4
gpt4 key购买 nike

一共有三个类,ChildChildChildParent,其中一个类扩展了另一个类。我使用大多数外部类的模板调用方法,并且希望调用方法 doSomething 来打印“CHILD”。而不是调用以前的方法。

class Test {
public <T extends Parent> void doSomething(T input) {
System.out.println("PARENT");
}
public <T extends Child> void doSomething(T input) {
System.out.println("CHILD");
}

public <T extends Parent> void run(T input) { doSomething(input); }
}

class Main {
public static void main(String[] args) {
Test t = new Test();
t.run(new ChildChild());
}
}

这是因为方法运行只为父类定义模板吗?

最佳答案

是的,当编译器删除泛型类型参数时,它们会被其类型边界所取代,因此您的 run 方法将变为:

public void run(Parent input) { doSomething(input); }

重载方法变为:

public void doSomething(Parent input) {
System.out.println("PARENT");
}
public void doSomething(Child input) {
System.out.println("CHILD");
}

因此,无论您传递给的实例的运行时类型如何,都会调用doSomething(Parent input)(请记住,方法重载解析是在编译时使用编译时类型确定的) run 方法。

关于java - 使用模板调用重载方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35037981/

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