面向物件原則之一 里氏替換原則
阿新 • • 發佈:2019-01-04
原文:
面向物件原則之一 里氏替換原則
前言
面向物件有人分為五大原則,分別為單一職責原則、開放封閉原則、依賴倒置原則、介面隔離原則、里氏替換原則。
也有人分為六大原則,分別為單一職責原則、開放封閉原則、依賴倒置原則、介面隔離原則、里氏替換原則、迪米特法則。
現在我們來介紹里氏替換原則
里氏替換原則
1)概念
其概念是子類物件能夠替換其基類物件被使用。
聽上面的概念好像很簡單,不就是父類實現的方法就能被子類實現,父類在外部的呼叫,替換成子類也可以嘛。
這麼理解就錯了,這裡的概念雖然說得簡單,但是其實並不是這樣理解的。
那麼我們說說里氏替換原則的真正概念吧。(原則)
2)原則
- 子類可以實現父類的抽象方法,但不能覆蓋父類的非抽象方法
- 子類可以增加自己持有的方法
- 當子類覆蓋或實現父類的方法時,方法的前置條件(引數)要比父類方法的引數更寬鬆
- 當子類的方法實現父類的抽象方法時,方法的後置條件(返回值)要比父類更嚴格
從上面可以看出,當我們繼承父類時,不要覆蓋父類的已經實現好的方法(抽象方法),只能覆未實現好的方法(非抽象方法)。
為什麼不要覆蓋父類已經實現的方法呢?因為如果覆蓋了已經實現的方法後,子-父類會變得很耦合。
雖然繼承是面向物件的3大特徵之一,但是如果用得不好(替換父類已經實現的方法),會使程式變得複雜,變得更加耦合。
對這一原則,也沒好舉什麼例子出來了。
其他連結: