java - 后期绑定(bind)是这样吗?

标签 java polymorphism late-binding

我在“多态性”一章的“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/

相关文章:

c++ - 后期绑定(bind)有什么优点?举一个 C++ 函数指针上下文中的例子

java - 在 onDraw() 中保存 Canvas;

java - Activiti - DelegateExpression 未解析

c++ - 如何使用专用线程类MyThreadClass

java - 同名调用的非覆盖子类方法

java - 什么是 Java 中的参数多态性(附示例)?

multithreading - python的queue.Queue.put()方法是异步的吗?

c# - 使用 C# 选择、复制和重新插入一系列 Excel 行

java - token 拦截器在 Struts 2 中如何工作

java - 验证空变量正则表达式