我在“多态性”一章的“Thinking in java”中读到关于“后期绑定(bind)”的概念,我只是想知道我对这个概念的理解是否正确
例如,过程语言知道在运行时之前要执行的函数在哪里
if(condition){func1();}else{func2();}
所以每个可能的函数的地址在程序运行之前就已经准确知道了,所以它很容易编译,但是在 OOL 中检查这段代码,,
makeItSpeak(Animal a ){
a.speak();
}
虽然 a 可能是狗、猫或任何其他动物类型,并且因为我们在运行时初始化对象,所以我们必须在运行时传递我们运行时所依据的参数,所以这是后期绑定(bind)发生在运行时....
这是真的吗??
最佳答案
是的,它是使用 virtual method table 实现的.
在您的示例中,speak()
是一个没有物理地址的虚拟(抽象)方法。在运行时,根据具体的 Animal
子类的类型,运行时通过引用虚方法表确定要调用哪个 speak()
的实现。
关于java - 后期绑定(bind)是这样吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3836089/