oop - 多态性与继承作为 oop 的支柱

标签 oop inheritance polymorphism

如这里所述

https://standardofnorms.wordpress.com/2012/09/02/4-pillars-of-object-oriented-programming/

并作为许多求职面试中的正确答案——问题的一般正确答案: “OOP 的 4 大支柱是什么?”是:

  1. 抽象

  2. 封装

  3. 继承

  4. 多态性

我不明白的是,多态性中不包含继承怎么办?

也就是说,不使用继承怎么能用多态呢?

我知道的使用多态性的唯一方法是

class A{
    virtual void foo(){cout<<"A";}
    void bar(){cout<<"A";}
};
class B : public A{
    virtual foo(){cout<<"B";}
};

A* ab = new B();
ab->foo();//prints B, using polymorphism
ab->bar();//prints A, using inheritance

A* a = new A();
a->foo();//prints A
a->bar();//prints A, obviously

在我看来,多态性带来了继承。

请解释为什么它与众不同 - 或者为什么不能将继承作为其自身的关键支柱而丢弃。我们可以使用或不使用多态性。

最佳答案

What I fail to understand is how inheritence not contained in polymorphism?

in other words, how can polymorphism be used without the use of inheritence?

多态有 3 种主要类型,只有一种需要继承才能起作用。

  1. Ad-hoc 多态性:这通常称为函数/方法重载,其中多个函数可以共享相同的名称但具有不同的签名。返回类型是否是签名的一部分取决于语言。

  2. 参数多态性:在 OOP 中,这通常称为泛型,其中一个函数/方法可以使用多个具体类型,并返回多个具体类型,从而提供编译时安全性。

  3. 子类型多态性:我想大多数人在谈到多态性时都会想到这一点。如您所知,这是子类型为其父函数/方法提供不同实现的时候。

您可以从此处的维基百科文章中阅读更多关于不同类型的多态性:https://en.wikipedia.org/wiki/Polymorphism_(computer_science)

关于oop - 多态性与继承作为 oop 的支柱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38330357/

相关文章:

c++ - 为什么这种继承失败(使用父类(super class)的方法)C++

java - JSP不能访问继承的方法吗?

c++ - 棘手的多态性和虚函数

javascript - 导出对象中的对象

oop - 在面向对象的设置中使用OpenGL绘图操作?

php - 使用 OOP 管理用户

c++ - 如何在不转换为派生类的情况下检查几何基类中的碰撞

c# - 将派生类集合分配给基类集合编译错误

c++ - 动态多态性未在 C++ 中正确实现

c# - 注入(inject)依赖困境的工厂模式和生命周期