【问题标题】:Dynamic binding == late binding in Java or not?动态绑定 == Java 中的后期绑定与否?
【发布时间】:2012-02-27 19:14:51
【问题描述】:

在不同的来源中,我阅读了有关该主题的不同内容。例如维基百科说:

后期绑定经常与动态调度混淆,但两者之间存在显着差异。

不过几行之后

在 Java 编程中使用术语后期绑定作为动态调度的同义词很流行。具体来说,这是指 Java 与虚拟方法一起使用的单一调度机制。

那么真相在哪里?这些“显着差异”是什么?

【问题讨论】:

标签: java oop polymorphism


【解决方案1】:

就所有意图和目的而言,后期绑定和动态单一调度都是相同的。在动态单一调度中,单个对象的值或标识决定了在运行时调用哪些代码,这就是 Java 中发生的事情。

动态调度这个术语通常最常用于表示动态多次调度,即在运行时根据身份或值选择运行时方法。 多个对象,这是 CLOS 和 Smalltalk 中的一种语言功能,但在 Java 或 C++ 中没有。

【讨论】:

  • +1,但我将“后期绑定”描述为像 Python 这样的语言的完全后期绑定调用,而 Java 的动态单一调度模型实际上是部分早期、部分后期绑定,更像是 C++ 虚方法。
  • 我曾假设 Java 7 中添加的动态调用执行动态调度。 java.sun.com/developer/technicalArticles/DynTypeLang有什么区别?
  • @DanielPryden -- 事实上,我同意这一点。你所说的“完全后期绑定”,我称之为“鸭子打字”;这基本上是基于方法而不是基于类型的查找。
  • @PeterLawrey -- 是的,那是“鸭子打字”。它能够在运行时发送消息,而对接收者的类型没有任何要求。 Java 语言本身不包含这个概念,但 Java 7 JVM 确实支持它(Java 现在通过类似反射的 API 类对它的支持很弱。)
  • @ErnestFriedman-Hill:是的,我认为“后期绑定”(在最完整的意义上)和“鸭子打字”基本上是一回事。我可能在它们之间做出的唯一区别是,我认为“后期绑定”是一种语言功能,而“鸭子打字”是一种更抽象的东西,基本上只是一种编程思维方式。但我承认那是一根很细的头发。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-12
  • 1970-01-01
  • 2015-05-02
  • 2010-10-13
相关资源
最近更新 更多