我们前面理解了类。类就是把具体事物给抽象出来。其实也有归类、类别的意思。
我们举一个例子:
人的职业有Teacher、Coder、Writer、Singer等职业
继承关系就是:
People
___________|___________
| | | |
Teacher Coder Writer Singer
但是有这么一类人比较特殊,白天上班码代码(Coder),晚上写文章(Writer),我们叫他为CoderWriter。
那么CoderWriter必须是继承了Coder类,也继承了Writer类。这就是多继承。
如果此时依旧是使用单继承实现起来就会比较傻(比如在People下再定义一个CodeWriter类,继承Coder类,然后再把Writer类里的代码复制过来)。
但是多重继承也不是万金油,也会带泪诸多问题:
结构复杂化
单继承中一个类的父类是什么,父类的父类是什么非常明确。多继承一个类有多个父类,父类又有多个父类,继承关系复杂。优先顺序模糊
多重继承的优先顺序,方法调用顺序不明确。功能冲突
当父类中有相同的方法的时候,继承的是哪个方法不明确。
为了解决上述问题,不同的编程方法采用不同的解决方法。
例如java采用只能extends一个父类,但是可以实现多个interface的方法。
python则采用Mixin的方式。
在松本行弘的《松本行弘的程序世界》中介绍了Ruby中mixin类的几个原则
通常的继承用单一继承
第二个以及两个以上的父类必须是Mix-in的抽象类
python中的多重继承应该也适用。继承反应的I am,Mixin反应的是I can。
我们可以通过Mixin的方式将某些能力添加给某一些类。
回到上面举例的例子。我们的继承关系可以这么来:
People
| Writable
| |
Coder |
| |——
Somebody
这样我们即保持相对单一的继承关系,又能享受多继承带来的好处。
这篇文章仅仅是供自己加深理解使用,可能存在许多错误。还请谅解。
更多的资料可以阅读知乎上的回答:https://www.zhihu.com/questio...
或者书籍《松本行弘的程序世界》
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。