继承(Inheritance) 允许一个类(子类或派生类)重用和扩展另一个类(超类或父类)的字段和方法。它对应 is-a 的关系:Dog 是 Animal。
重用和扩展
python
:
():
.name = name
():
():
():
d = Dog()
(d.eat())
(d.bark())
Dog 免费获得了 __init__ 和 eat,并添加了 bark。子类还可以 override(覆盖)继承的方法来改变行为。
| 优势 | 风险 |
|---|---|
| 重用共享代码 | 与父类紧密耦合 |
| 建模真实层次结构 | 脆弱基类——父类变化会破坏子类 |
| 通过公共类型的多态 | 深层继承树难以理解 |
一条通用准则:当关系真正是 "has-a"(有一个)而非 "is-a"(是一个)时,优先使用组合而非继承。
继承是最常被滥用的面向对象编程特性:仅为了共享代码而使用它很诱人,但这会导致不相关的类之间产生耦合。
正确使用时——仅用于真正的 is-a 关系——它既给你代码重用又给你多态性,让你能够通过公共父类统一处理许多子类型。