压倒一切的多态性概念还是继承性概念?面向对象
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 中重写,即使它是可能的?如果我需要多个定义,我可能会重载。)
今天去面试,被问到这个问题,我回答overriding是Inheritance的概念,但是他们一直说No,是Polymorphism的概念! 我很确定。但现在我想我需要更多的曝光。
答案可能很长!但简单来说,它会是 "Inheritance" 或 "Polymorphism"
我认为他们要求您阐述的是“面向对象编程语言的 4 个属性”。尽管这些经典属性似乎已经风化和磨损,但我想说它们仍然适用于面向对象的范例。
这 4 个属性是:
- 继承("is a" 关系的对象层次结构)
- 抽象(实现细节之上的功能)
- 封装(信息隐藏)
- 多态性(需要覆盖)
覆盖比继承更接近多态性,因为可以在不覆盖任何方法的情况下进行子类化。但是,多态性总是要求子类覆盖某些超类方法。
我会说两者。我们在继承中使用 override 来覆盖 base class 函数的一个函数行为。这也称为运行时多态性,因为调用基 class 函数或派生函数是在运行时决定的。但是,是的,我同意 scottb 的观点,他们会期待 OOPS 的哪个支柱与 Override 紧密相关。
多态性:重载
继承:覆盖
尽管这两个概念在含义和定义上有重叠。
多态性 = 一个方法多个定义 = 重载。
继承 = 扩展基础 class 或更改其现有行为 = 覆盖。 (虽然不完全是)
虽然重写和重载都实现了多态,但是想着重写而不继承几乎是没有意义的。 (为什么我需要在同一个 class 中重写,即使它是可能的?如果我需要多个定义,我可能会重载。)