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,有什麼替代方案呢?