多重继承和多态性有什么区别?
在一本书中,我用红线说
在类级别不支持多重继承。这意味着您不能一次扩展多个课程。
这与多态性的概念相矛盾,在同一本书中描述
多态性是从特定基类创建多个对象的过程
现在如果PHP中不允许多重继承,那么如何允许多态性?
答案 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不允许多重继承。