动态类型是否与动态(后期)绑定相同?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态类型是否与动态(后期)绑定相同?相关的知识,希望对你有一定的参考价值。

在后期绑定中,方法的名称在运行时绑定到类型。这与动态打字有什么不同?

答案

动态类型意味着您不必声明变量的类型;变量可以包含任何类型的值,并且在使用变量时在运行时确定类型。大多数脚本语言都使用动态类型:javascriptphp,Python。这与静态类型形成对比,静态类型在C,C ++和Java中使用。

但是,静态类型的OO语言允许有限形式的动态,因为类可以有子类。在Java中,声明为持有类的变量也可以包含其任何子类;在C ++中,指向基类的指针也可以指向派生类的对象。

后期绑定是指如何选择多态函数的方法。如果您有一个类和一个子类,并将方法绑定到这些类之一的实例,它是否使用执行绑定的类(可以是父类)或对象的实际类。早期绑定意味着它使用执行绑定的类,后期绑定意味着它使用对象的实际类。 Javascript实际上没有类,所以在这种情况下它指的是原型链中的哪个原型包含执行方法绑定的函数。

这两个概念显然是相关的。如果变量只能保存单个类型的对象,则后期绑定没有意义,因此后期绑定取决于动态类型。在C ++中,当您通过对象变量调用成员函数时,可以获得早期绑定,例如var.func()。要获得后期绑定,必须将成员函数声明为virtual,并且必须通过指针ptr->func()调用它。在Java和Javascript中,您通常会得到后期绑定,但是可以使用Function.prototype.bind()来调用特定原型的方法。

Early and Late Binding展示了如何在Javascript原型中实现早期和晚期绑定。

编辑:

糟糕,这个链接不再有效,而且它似乎没有在Wayback Machine中存档。目前,我能找到的最好的讨论是在Software Engineering SE:What is early and late binding?

以上是关于动态类型是否与动态(后期)绑定相同?的主要内容,如果未能解决你的问题,请参考以下文章

Java动态绑定

第9章 多态动态类型和动态绑定(Objective-C 程序设计)

前期绑定后期绑定

iOS开发笔记系列-基础3(多态动态类型和动态绑定)

Java动态绑定与多态

Objective-C多态:动态类型识别+动态绑定+动态加载