多态性不仅仅是继承的副作用吗?

时间:2014-06-11 21:23:39

标签: oop design-patterns language-agnostic

我刚刚学习oop并且正在努力解决继承和多态之间的差异。

如果我理解正确,继承定义了类型层次结构和类之间的关系。子类从父类继承行为,并且可以提供父级上任何公共接口的专门行为。

多态性是这些子类可以在仍然遵循父接口的同时提供自己的行为。

这是不是同样的事情?

3 个答案:

答案 0 :(得分:10)

你是对的,在大多数OO语言中,继承和多态与另一种语言相互依存。但是:

  1. 多态性和继承都说明了不同的方面。 Polymorhpism显示了类型在操作中如何相互存在,而继承显示了类型之间的关系。
  2. 多态性和继承不必一般一起例如,如果你看整数和浮点数,它们都可以站在同一个地方算术表达的位置,所以它实际上是多态的,但是没有继承。此外,可以在没有多态的情况下进行继承。

答案 1 :(得分:2)

最好的方法是通过继承来实现多态。 继承定义了层次结构和is-a原则,因此可以实现多态性。

答案 2 :(得分:0)

继承也可以用来(不再被认为是一种好的做法)来继承和扩展功能。

class MovableObject {
  protected: // usable in subclasses
    position: Point;

  public:
    void Move(Vector diff) { position += diff; }
}

class Car: private MovableObject { // private inheritance hides the interface
  private:
    float fuelLeft;

  public Drive(Vector diff, float fuelSpent) {
    Move(diff);
    fuelLeft -= fuelSpent;
  }
}

当然,这不是最好的类设计,但并不意味着它,但它说明了如何在没有多态的情况下继承。