gpt4 book ai didi

Java - 两个方法具有相同的名称,不同类型的相同参数,但类型按层次结构相关

转载 作者:行者123 更新时间:2023-12-02 03:20:16 25 4
gpt4 key购买 nike

假设我有

Interface A {
public void doSomething(Object a);
}

Interface B {
public void doSomething(Foo b);
}

Class C implements A, B {

public void doSomething(Object a) { print("a"); }
public void doSomething(Foo b) { print("b"); }

}

我猜调用 new C.doSomething(new Foo()); 将打印 "b",即使 Foo 扩展了 Object。

但是如果我想要子方法的共同行为怎么办:

Class C implements A, B {

public void doSomething(Object a) { print("common behavior from " + a ); }
public void doSomething(Foo b) { doSomething((Object) b); }
public void doSomething(Bar c) { doSomething((Object) c);}

}

当我使用 FooBar 调用 doSomething 时,这会起作用吗?或者它们最终会陷入无限循环,因为最后执行 ((Object) c) instanceof Bar == true?

Java如何定义调用哪个方法?

最佳答案

重载解析发生在编译时。 bc 的运行时类型是什么并不重要。只要它们被转换为 Object,它就会调用 Object 重载。所以你的例子应该可以正常工作。

另一个常见的用例是您想要将文字 null 传递给方法,并且需要将其转换为某种类型以避免重载歧义。例如。 c.doSomething((Foo)null).

关于Java - 两个方法具有相同的名称,不同类型的相同参数,但类型按层次结构相关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39713802/

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