gpt4 book ai didi

java - Java 重载一个方法,该方法的参数是从另一个方法获取的参数的子类型,会发生什么情况?

转载 作者:行者123 更新时间:2023-12-02 10:27:19 26 4
gpt4 key购买 nike

标题可能有点令人困惑,让我用一个例子来解释一下。
假设我有两个类:

class Parent {} 

class Child extends Parent {}

然后在其他地方定义一个具有 Parent 类型的单个参数的方法,如下所示:

public void doSomething(Parent parameter) {...}

由于多态性,我还可以将 Child 类型的对象传递给上面的方法,因为它扩展了 Parent。

现在让我们重载

public void doSomething(Parent parameter) {...}

public void doSomething(Child parameter) {...}

然后在代码的其他部分调用 doSomething 并传递 Child 类型的参数

Child myElement = new Child();
doSomething(myElement);

在这种情况下,两个重载方法都是有效的,因为 Child 类型的元素可以传递给两个方法。
将调用哪一个?

我编写了一个测试,似乎执行了第二个测试(在输入中采用 Child 类型参数的测试),这对我来说也有意义,但我想知道它是否定义良好行为或可能会根据例如 jvm 实现或声明两个方法的顺序或只是随机等而变化。

最佳答案

一般来说,会调用参数最具体的方法。在您的示例中,采用 Child 的方法比采用 Parent 的方法更具体,因此调用的是前者。

actual rules有点复杂,但定义良好,并且是语言规范的一部分。有效的编译器或 JVM 必须遵循这些规则。

关于java - Java 重载一个方法,该方法的参数是从另一个方法获取的参数的子类型,会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53854951/

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