运行时动态绑定和类继承之间的区别
Difference between runtime dynamic binding and class inheritance
我试图阐明动态语言(Python、ruby)和静态类型语言(java、C++)中运行时动态绑定和类继承的概念。我不确定我是对是错。
在Python和Ruby等动态语言中,运行时动态绑定是作为鸭子类型实现的。当解释器检查对象的类型时,它会检查对象是否具有特定的方法(或行为),而不是检查该对象的类型;运行时动态绑定并不意味着类继承。类继承只会减少Python和Ruby中的代码副本。
在Java和C++等静态类型语言中,运行时动态绑定只能通过类继承获得。类继承不仅减少了这里的代码复制,而且还用于实现运行时动态绑定。
总之,类继承和运行时动态绑定是两个不同的概念。在Python和Ruby中,它们完全不同;在Java和C++中,它们是混合在一起的
我说得对吗?
您是正确的,运行时动态绑定在概念上与类继承完全不同。
但当我重读你的问题时,我不认为我会同意"Java和C++,运行时动态绑定是作为类继承实现的。"类继承只是更广泛行为的定义,包括现有类的现有行为。此外,运行时绑定不一定与对象定向有任何关系;它可以仅指延迟方法解析。
类继承是指如何构建对象的"模板",通过连续的子类具有越来越精细的行为。运行时动态绑定只是表示对方法的引用(例如)被推迟到执行时的一种方式。在给定的语言中,特定的类可以利用运行时动态绑定,但继承的类在编译时解析。
简而言之,继承是指对象的定义或蓝图。在最基本的级别上,运行时动态绑定只是一种在执行时解析方法调用的机制。
EDIT我确实需要澄清一点:Java在重写的类方法上实现动态绑定,而C++在运行时通过多态性来确定类型,所以说动态绑定与类继承"没有关系"是不准确的。在"宏"级别上,它们并没有内在的相关性,但给定的语言可能会在其继承机制中利用它。
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 我想知道长双倍和双倍之间的区别
- 这 4 个 lambda 表达式之间有什么区别?
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- (double) 和 double() 之间的区别
- & 和 * 之间的区别
- std::is_convertible 和 std::convertible_to 之间的区别(在实践中)?
- 析构函数和'delete'之间的区别
- 在 typedef 内部使用 const 关键字和在 typedef 外部使用 const 关键字之间有区别吗?
- 从预序遍历构造 bst 的 c++ 和 python 解决方案之间的区别
- vector.back() 和 vector[vector.size() - 1] 之间的区别?
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 函数签名与调用的函数不匹配,常量字符[]和字符*之间的区别?
- OpenMP #pragma omp for v/s #pragma omp parallel for 之间的区别?
- S() 与 S{} 之间的区别?