运行时动态绑定和类inheritance之间的区别

我试图澄清动态语言(Python,ruby)和静态类型语言(java,C ++)中的运行时动态绑定和类inheritance的概念。 我不确定我是对的。

在Python和Ruby等动态语言中,运行时动态绑定实现为duck typing。 当解释器检查对象的类型时,它会检查对象是否具有特定的方法(或行为),而不是检查对象的类型; 和运行时动态绑定并不意味着类inheritance。 类inheritance只是减少Python和Ruby中的代码副本。

在Java和C ++等静态类型语言中,运行时动态绑定只能获得类inheritance。 类inheritance不仅减少了代码副本,还用于实现运行时动态绑定。

总之,类inheritance和运行时动态绑定是两个不同的概念。 在Python和Ruby中,它们完全不同; 在Java和C ++中,它们混合在一起。

我对吗?

你是正确的,因为运行时动态绑定在概念上与类inheritance完全不同。

但是当我重新阅读你的问题时,我认为我不同意“Java和C ++,运行时动态绑定是作为类inheritance实现的”。 类inheritance只是包含现有类的现有行为的更广泛行为的定义。 此外,运行时绑定不一定与面向对象有任何关系; 它只能引用延迟的方法解析。

类inheritance是指对象如何构建的“模板”,具有连续子类的越来越精细的行为。 运行时动态绑定只是表示对方法(例如)的引用被推迟到执行时间的一种方式。 在给定语言中,特定类可以利用运行时动态绑定,但在编译时具有已inheritance的类。

简而言之, inheritance是指对象的定义蓝图 。 运行时动态绑定在最基本的层面上只是一种在执行时解析方法调用的机制。

编辑我需要澄清一点:Java在重写的类方法上实现动态绑定,而C ++在运行时通过多态来确定一个类型,因此我不能说动态绑定与类inheritance“没有关系” 。 在“宏”级别,它们本身并不相关,但是给定的语言可能会在其inheritance机制中利用它。