行爲亞型的里氏的概念定義 可替代性的一個對象的概念;也就是說,如果S是T的子類型,那麼在程序中類型T的對象可以用類型S 的對象代替而不改變該程序的任何期望屬性(例如 正確性)。
假設,我們有下一個類層次結構:
- 的基礎上,抽象類 - AnimalWithFur。它具有隻讀屬性furColor,這應該在後繼中被覆蓋。
- 基類的後繼者 - Cat,它覆蓋了furColor並返回灰色。
- 貓的繼任者 - 老虎,它覆蓋furColor和收益剝離
然後,我們聲明瞭一個方法,它有一個類型貓(不AnimalWithFur)的參數。向該方法發送Tiger實例會違反SOLID中的L原則嗎?
重寫參數類型爲AnimalWithFur改變了什麼? –
不,因爲屬性furColour在AnimalWithFur上。而且你還在用一隻老虎替代一隻貓,因爲我必須假設,如果你考慮LSP,你代替了,你只有兩種具體類型;貓和老虎。 – weston
甚至可能不關心實際定義的屬性的位置,如果它改變了程序的理想屬性,那麼它就是LSP違例。 – weston