压倒一切的多态性概念还是继承性概念?面向对象

Is overriding Concept of polymorphism or Concept of inheritance? OOP

今天去面试,被问到这个问题,我回答overriding是Inheritance的概念,但是他们一直说No,是Polymorphism的概念! 我很确定。但现在我想我需要更多的曝光。

答案可能很长!但简单来说,它会是 "Inheritance" 或 "Polymorphism"

我认为他们要求您阐述的是“面向对象编程语言的 4 个属性”。尽管这些经典属性似乎已经风化和磨损,但我想说它们仍然适用于面向对象的范例。

这 4 个属性是:

  • 继承("is a" 关系的对象层次结构)
  • 抽象(实现细节之上的功能)
  • 封装(信息隐藏)
  • 多态性(需要覆盖)

覆盖比继承更接近多态性,因为可以在不覆盖任何方法的情况下进行子类化。但是,多态性总是要求子类覆盖某些超类方法。

我会说两者。我们在继承中使用 override 来覆盖 base class 函数的一个函数行为。这也称为运行时多态性,因为调用基 class 函数或派生函数是在运行时决定的。但是,是的,我同意 scottb 的观点,他们会期待 OOPS 的哪个支柱与 Override 紧密相关。

多态性:重载

继承:覆盖

尽管这两个概念在含义和定义上有重叠。

多态性 = 一个方法多个定义 = 重载。

继承 = 扩展基础 class 或更改其现有行为 = 覆盖。 (虽然不完全是)

虽然重写和重载都实现了多态,但是想着重写而不继承几乎是没有意义的。 (为什么我需要在同一个 class 中重写,即使它是可能的?如果我需要多个定义,我可能会重载。)