如这里所述
https://standardofnorms.wordpress.com/2012/09/02/4-pillars-of-object-oriented-programming/
并作为许多求职面试中的正确答案——问题的一般正确答案: “OOP 的 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 种主要类型,只有一种需要继承才能起作用。
Ad-hoc 多态性:这通常称为函数/方法重载,其中多个函数可以共享相同的名称但具有不同的签名。返回类型是否是签名的一部分取决于语言。
参数多态性:在 OOP 中,这通常称为泛型,其中一个函数/方法可以使用多个具体类型,并返回多个具体类型,从而提供编译时安全性。
子类型多态性:我想大多数人在谈到多态性时都会想到这一点。如您所知,这是子类型为其父函数/方法提供不同实现的时候。
您可以从此处的维基百科文章中阅读更多关于不同类型的多态性:https://en.wikipedia.org/wiki/Polymorphism_(computer_science)
关于oop - 多态性与继承作为 oop 的支柱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38330357/