【问题标题】:is there any overriding that does not fall under dynamic polymorphism是否有任何不属于动态多态性的覆盖
【发布时间】:2013-08-02 15:57:12
【问题描述】:

最近在一次采访中有人问我,“Java 中动态多态的例子是什么?”

我回答“方法覆盖”。

面试官接着问道,“有没有什么不属于动态多态的最重要的概念?”

这真的是一个好问题吗?如果有,答案是什么?

提前致谢。

【问题讨论】:

  • 动态多态性?那是多余的。没有静态多态性。阅读后期绑定。
  • 可能他/她指的是影子?
  • @SotiriosDelimanolis 据我了解,静态多态是重载,动态多态是重载。
  • @Marconius 一点也不。重载与多态无关。多态性允许使用统一接口处理不同数据类型的值 (wiki).
  • @SotiriosDelimanolis 多态性也涉及方法;我所有的搜索结果基本上都说静态多态性是在编译时评估的任何类型的新定义,动态是在运行时评估的。 SourceAnother source

标签: java polymorphism overriding


【解决方案1】:

如果问题是关于 C++ 的,那么答案应该是“是”,因为成员函数不必是虚拟的。然而,在 Java 中,所有方法在 C++ 术语中都是虚函数,因此在不涉及动态调度的情况下,不可能涉及覆盖的概念,这会导致多态行为。

任何其他将成员命名为与超类成员相同的示例,都不是覆盖,而是隐藏,是一个完全不同的概念:子类member 与超类成员没有任何关系,只是碰巧有相同的名称。子类甚至可以继承同名成员,因此有两个同名成员,仍然可以通过用类名限定成员名来访问它们。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-08
  • 1970-01-01
  • 2018-02-27
  • 1970-01-01
  • 2021-11-06
  • 2017-09-08
相关资源
最近更新 更多