gpt4 book ai didi

Java动态绑定(bind): Why the compiler cannot distinguish overriden methods

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

我正在尝试更深入地理解动态/静态绑定(bind),我可以说,经过大量阅读和搜索后,我对某些事情感到非常困惑。

嗯,java对重写方法使用动态绑定(bind),其原因是编译器不知道该方法属于哪个类,对吗?例如:

public class Animal{
void eat(){
}

class Dog extends Animal{
@Override
void eat(){}
}

public static void main(String[] args[]){
Dog d = new Dog();
d.eat();
}

我的问题是,为什么编译器不知道代码引用了 Dog 类 eat() 方法,即使 d 引用被声明为 Dog 类并且 Dog 的构造函数用于在运行时创建实例?该对象将在运行时创建,但为什么编译器不理解该代码引用了 Dog 的方法?这是编译器设计的问题还是我遗漏了什么?

最佳答案

and the reason for this is that the compiler doesn't know to which class the method belongs to, right?

事实上,没有。编译器不想知道目标对象的具体类型。这允许现在编译的代码将来可以与尚不存在的类一起使用。

最明显的例子是考虑像 Collections.sort(List) 这样的 JDK 方法。您可以将刚刚创建的 List 的实现传递给它。您不想通知 Oracle 您已执行此操作,并希望他们将其包含在“静态支持”列表类型列表中。

关于Java动态绑定(bind): Why the compiler cannot distinguish overriden methods,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40421226/

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