gpt4 book ai didi

java - 具有相同名称的函数接收不同派生类的实例

转载 作者:行者123 更新时间:2023-12-01 22:46:43 25 4
gpt4 key购买 nike

我有一个基本抽象类和 2 个扩展类:

public abstract class A {}
public class B extends A {}
public class C extends A {}

然后我有一个主类,它有 2 个类似的函数,一个调用 B 类型的对象,另一个调用 C 类型的对象:

public class Manager {
public void foo(B b) {}
public void foo(C c) {}
}

现在,我想在类管理器中做这样的事情:

public void bar(A a) {
foo(a);
}

在这一部分,我希望 Java 能够识别 a 是 B 类型还是 C 类型,并相应地调用相关函数 - 接受 B 作为参数的函数,或接受 C 作为参数的函数。但是,这行不通。相反,我必须这样做 -

if (a instanceof B) {
foo((B)a);
} else {
foo((C)a);
}

我在这里遗漏了什么吗?我注意到在所有其他地方,Java 非常清楚要调用哪个函数,而我仅在此函数调用中遇到问题

最佳答案

Java 仅根据调用方法的对象动态调度(以选择哪个类提供方法实现)。基于参数类型的调度(重载所必需的)是在编译时静态完成的。

关于java - 具有相同名称的函数接收不同派生类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25226767/

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