java - 所有的动态绑定(bind)都是一种多态吗?

标签 java inheritance polymorphism terminology dynamic-binding

所有的动态绑定(bind)都被认为是多态性吗?具体来说,我说的是Java。如果没有,请解释这两个术语。

我所知道的是:并不是所有的继承都是多态,但是所有的多态都使用了继承。

最佳答案

首先dynamic binding (或后期绑定(bind))是一个不恰当的术语。您正在谈论dynamic dispatch这是另一回事。

动态绑定(bind)是选择在运行时调用方法的哪个实现,但这在 Java 中不会发生。但是你有动态分派(dispatch),它能够在编译时选择方法的正确多态实现(这通常转化为选择方法/函数的最专业版本 )。

但我不会说动态分派(dispatch)是多态性,我想说的是,为了支持多态性,您需要一种机制来选择方法的正确实现,这就是动态分派(dispatch)。

继承是一种多态性,称为 subtyping (或子类型多态性)所以,与你所说的相反,继承始终是多态性的一种形式,但还存在其他类型的多态性,请考虑:

  • ad hoc polymorphism (通过重载实现)相同的函数在应用于不同的参数时具有不同的含义
  • parametric polymorphism (用 Java 中的泛型实现)如果您拥有带有类型变量的类型,则单个类型可以通过将变量绑定(bind)到特定类型(或一类类型)来表达无限数量的类型,请考虑 List<Integer>

关于java - 所有的动态绑定(bind)都是一种多态吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31039848/

相关文章:

java - 为单元测试添加 protected 方法的良好做法?

java - 访问子类字段会导致编译器错误

python - Django 1.7.1 : Child model, 删除对父模型的所有引用并让子模型继承自爷爷

c++ - C++ 中的多态性,子类型?

java - 在java中显示文件中的一些行

java - 为什么使用链表会出现 java stackoverflow 错误?

java - 在这种情况下我应该使用instanceof还是需要使用多态性

Java:具有接口(interface)属性的对象的 Jackson 多态 JSON 反序列化?

java - Slick2D 粒子系统不会生成粒子

c# - Web API 2.2,具有路由覆盖的继承 Controller (这可能吗)?