Liskov Substitution Principle (LSP)
這個原則跟何時該使用繼承有關:derived class 必須能替代 base class。
使用繼承時必須確保 base class 的所有特性及 method 對 derived class 仍成立,反過來說,derived class 必須有 base class 所有特性。一個 derived class 的 object 是一個(is-a)base class 的 object,原本對 base class 的 object 所做的所有操作可以直接換成對 derived class 的 object 操作。
C++ 的 public 繼承在意義上即是 LSP 所說的繼承觀念。
繼承的替代方案
使用繼承一般是希望擴充原有 class,但如果套用繼承時發現會違反 LSP,有什麼替代方案呢?
- Delegate
將達成某功能的任務委託給原本想擴充的 class,也就是不負責任的丟給別人做。 - Composition
- Aggregation