gpt4 book ai didi

java - 为什么动态调度的目标在编译时没有确定?

转载 作者:行者123 更新时间:2023-11-30 06:17:37 26 4
gpt4 key购买 nike

我现在正在阅读一本 Java 书籍,并且在思考动态方法调度的工作原理时陷入了相当长的一段时间。我知道这是一个强大而有值(value)的功能,但我不明白它的主要原理。例如,我有一个 B 类,它继承自 A 类并重写了 A 的一些方法。所以,当我写程序的时候,我可能会用到这些表达式

A a = new B();
a.someOverridenMethod();

我知道在这种情况下将调用方法的版本 B,而不是 A。但是我不明白的部分是,为什么编译器不能确定方法的版本(父类(super class)或子类)打电话?我的意思是,它明确声明了变量 a 将持有对类型 B 对象的引用。那么,为什么即使在代码中明确声明,也只能在运行时确定这一点?

最佳答案

一个更清楚的例子可能是:

A a = null;

if (getUserInput() == 'B')
{
a = new B();
}
else
{
a = new C();
}

a.overridenMethod();

编译器可能不知道这里将调用哪个方法——它由用户在运行时决定!

关于java - 为什么动态调度的目标在编译时没有确定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25728055/

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