因此,目前正在阅读有关绑定的内容...根据我能想到的示例以及在网络上找到的示例,动态绑定似乎主要发生在解释语言中,而不是发生在编译语言中。在 Java 中也会出现一些情况,但 java 不是一种“纯粹的”编译语言。我读过 - http://en.wikipedia.org/wiki/Dynamic_binding_(computing)。
那么我的问题是——对于类、方法和对象,动态绑定是否首先发生在对象级别,然后追溯到方法、类等?此外,是否存在动态绑定发生在编译语言中的对象级别的实例?
因此,目前正在阅读有关绑定的内容...根据我能想到的示例以及在网络上找到的示例,动态绑定似乎主要发生在解释语言中,而不是发生在编译语言中。在 Java 中也会出现一些情况,但 java 不是一种“纯粹的”编译语言。我读过 - http://en.wikipedia.org/wiki/Dynamic_binding_(computing)。
那么我的问题是——对于类、方法和对象,动态绑定是否首先发生在对象级别,然后追溯到方法、类等?此外,是否存在动态绑定发生在编译语言中的对象级别的实例?
您的问题有一系列定义问题。对于动态绑定,您可能会想到:
对于编译与解释,您可能会想到:
一般来说,很少有语言被编译成机器码,而且大多数没有动态名称查找或对象继承。许多语言被编译(但不是机器代码)并且其中许多具有动态名称查找,具有类或对象继承。
所以答案是,这取决于。
不,动态绑定可以发生在编译语言中,比如 C++:
https://en.wikipedia.org/wiki/Dynamic_binding_%28computing%29
请注意,Java 也被编译成字节码,然后由 JVM 解释。有时解释语言和编译语言之间的区别会变得模糊(例如使用动态调度的 C++)。
编译语言和解释语言是一种错误的二分法,在编程语言社区中引起了很多混乱。许多现代语言实现平台都包括解释器和编译器。即使该语言最初且长期存在的实现是编译器,但这并不意味着以后不能为它编写解释器。那里有不止一个 C 解释器以及几十个 Lisp 编译器。