多重继承和多态性有什么区别?

时间:2010-04-23 06:01:18

标签: php oop polymorphism multiple-inheritance

多重继承和多态性有什么区别?

在一本书中,我用红线说

在类级别不支持多重继承。这意味着您不能一次扩展多个课程。

这与多态性的概念相矛盾,在同一本书中描述

多态性是从特定基类创建多个对象的过程

现在如果PHP中不允许多重继承,那么如何允许多态性?

3 个答案:

答案 0 :(得分:19)

就像Ikke所说,多重继承与多态性无关。

如果我可以绘制类图,则多重继承如下所示:

Base A    Base B
  ^         ^
   \       /
    \     /
     Child

因此,类Child将继承两个类的属性和行为。 Java和PHP等许多语言都不允许这样,但Python确实如此。

另一方面,

多态性就是抽象出专业化的时候。首先,类图:

     Animal
     ^    ^
    /      \
   /        \
 Cat        Dog

您可以执行以下操作:

// Assuming we have a pack of animals
// This is Java
for (Animal pet : pack)
    pet.speak();

每个pet会根据实施情况说出不同的内容。

答案 1 :(得分:3)

多重继承意味着对象继承自两个不同的父类。程序员自行车手是程序员和自行车手。当Programmer类将其成员数据favorite_activity定义为hacking而自行车骑士也有favorite_activity时会出现问题,但它是riding。如果你问一个ProgrammerBicyclist她的favorite_activity是什么,那么正确答案是什么?

多态性处理对象的行为。它允许您告诉对象执行某些操作并使结果操作依赖于对象的类,即使您不确切知道它是什么。所以你遇到一个人,虽然你不知道它是程序员还是库克,你告诉她perform_your_job()。如果是程序员,她会编写代码,如果是库克,她会做饭,但你不必专门告诉她write_code()make_a_meal()

答案 2 :(得分:1)

这两个人彼此之间几乎无关。

多重继承在编译时/运行时之后是静态的。多态性是一种只在运行时实际决定调用子类型的方法的技术。

PHP不允许多重继承。