多重继承和多态之间有什么区别?
在一本书中,我读到了这样一句话:
类级别不支持多重继承。这意味着您不能同时扩展多个类。
这与同一本书中描述的多态概念相矛盾:
多态是从特定基类创建多个对象的过程
现在,如果PHP不允许多重继承,那么如何允许多态?
多重继承和多态之间有什么区别?
在一本书中,我读到了这样一句话:
类级别不支持多重继承。这意味着您不能同时扩展多个类。
这与同一本书中描述的多态概念相矛盾:
多态是从特定基类创建多个对象的过程
现在,如果PHP不允许多重继承,那么如何允许多态?
像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
会说不同的话。
speak
实际上会返回一个字符串。它可能会返回一个数据库对象。(请参见 https://dev59.com/H3RB5IYBdhLWcg3wAjRH) - SeanJAfavorite_activity
为hacking
,而骑自行车的人也有favorite_activity
,但它是riding
。如果你问一个程序员骑自行车的人她最喜欢的favorite_activity
是什么,正确的答案是什么?perform_your_job()
。如果是程序员,她将编写代码;如果是厨师,她将烹饪一顿饭,但你不必特别告诉她write_code()
或make_a_meal()
。这两者之间几乎没有什么关系。
多重继承是编译时/运行时静态的东西。多态是一种技术,在运行时才决定调用子类型的哪个方法。
PHP不允许多重继承。