Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
动态绑定==是否为Java中的后期绑定?_Java_Oop_Polymorphism - Fatal编程技术网

动态绑定==是否为Java中的后期绑定?

动态绑定==是否为Java中的后期绑定?,java,oop,polymorphism,Java,Oop,Polymorphism,在不同的来源中,我读到了关于这个话题的不同的东西。例如,维基百科说: 后期绑定通常与动态调度相混淆,但两者之间存在显著差异 但是几行之后 在Java编程中,使用术语后期绑定作为动态调度的同义词是很流行的。具体来说,这是指Java与虚拟方法一起使用的单一分派机制 那么,真相在哪里?这种“显著的差异”是什么呢?后期绑定和动态单次分派在所有意图和目的上都是相同的。在DynamicSingleDispatch中,单个对象的值或标识决定了在运行时调用哪些代码,而Java中就是这样 术语动态调度通常用于表示

在不同的来源中,我读到了关于这个话题的不同的东西。例如,维基百科说:

后期绑定通常与动态调度相混淆,但两者之间存在显著差异

但是几行之后

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


那么,真相在哪里?这种“显著的差异”是什么呢?

后期绑定和动态单次分派在所有意图和目的上都是相同的。在DynamicSingleDispatch中,单个对象的值或标识决定了在运行时调用哪些代码,而Java中就是这样


术语动态调度通常用于表示动态多重调度,即在运行时根据多个对象的标识或值选择运行时方法,这是CLOS和Smalltalk中的语言功能,但不是java或C++。

你指的是懒惰的加载吗?@ BMRAN:不,他在说一个更基本的语言水平的东西。参见和+1,但我将“后期绑定”的特性描述为Python语言的完全晚绑定调用,而java的动态单调度模型实际上是部分早期的、部分后期绑定,更像C++虚拟方法。我假设java 7中添加的调用动态执行动态调度。“有什么区别吗?”丹尼尔普赖登——的确,我同意这一点。你所谓的“完全迟到”,我称之为“鸭子打字”;这基本上是基于方法的查找,而不是基于类型的查找。@PeterLawrey--是的,这是“duck-typing”。它能够在运行时发送消息,而不需要对收件人的类型有任何要求。Java语言本身不包含这个概念,但Java 7 JVM确实支持它(Java现在通过API类的反射来弱支持它。)@ErnestFriedman Hill:是的,我认为“后期绑定”(完全意义上)和“鸭子类型”基本上是一样的。我对它们唯一的区别是,我认为“后期绑定”是一种语言特性,而“duck-typing”是一种更抽象的东西,基本上只是一种编程思维。但我承认那是一个很好的发型。