gpt4 book ai didi

java - java中方法重载的行为

转载 作者:行者123 更新时间:2023-12-01 23:38:49 25 4
gpt4 key购买 nike

我尝试了以下代码

public class HelloWorld {

public void printData(Test t) {
System.out.println("Reached 1");
}

public void printData(newTest t) {
System.out.println("Reached 2");
}

public void printData(newTest1 t) {
System.out.println("Reached 3");
}

public static void main(String args[]) {
Test t1 = new Test();
HelloWorld h = new HelloWorld();
h.printData(t1);

NewTest t2 = new NewTest();
h.printData(t2);

NewTest1 t3 = new NewTest1();
h.printData(t3);

Test t4 = new NewTest();
h.printData(t4);

Test t5 = new NewTest1();
h.printData(t5);
}
}

我有简单的类(class)

class Test {
}

class NewTest extends Test {
}

class NewTest1 extends Test {
}

我得到的输出是

Reached 1
Reached 2
Reached 3
Reached 1
Reached 1

从输出看来,当 jvm 决定执行哪个函数时,它仅考虑引用的类型,而不考虑对象的实际类型

为什么会发生这种情况?为什么jvm不能考虑实际对象的类型而不是指向它的引用的类型?

最佳答案

函数重载是编译时多态性,这里编译器决定将调用哪个版本的方法。对于编译器来说,很难知道运行时的实际对象,因此它仅检查引用类型,而不管它将要调用的对象是什么点。

关于java - java中方法重载的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18265994/

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