1. 程式人生 > >面向物件原則之一 里氏替換原則

面向物件原則之一 里氏替換原則

原文: 面向物件原則之一 里氏替換原則

前言

面向物件有人分為五大原則,分別為單一職責原則、開放封閉原則、依賴倒置原則、介面隔離原則、里氏替換原則。

也有人分為六大原則,分別為單一職責原則、開放封閉原則、依賴倒置原則、介面隔離原則、里氏替換原則、迪米特法則。

 

現在我們來介紹里氏替換原則

 

里氏替換原則

1)概念

其概念是子類物件能夠替換其基類物件被使用。

聽上面的概念好像很簡單,不就是父類實現的方法就能被子類實現,父類在外部的呼叫,替換成子類也可以嘛。

這麼理解就錯了,這裡的概念雖然說得簡單,但是其實並不是這樣理解的。

那麼我們說說里氏替換原則的真正概念吧。(原則)

2)原則

  • 子類可以實現父類的抽象方法,但不能覆蓋父類的非抽象方法
  • 子類可以增加自己持有的方法
  • 當子類覆蓋或實現父類的方法時,方法的前置條件(引數)要比父類方法的引數更寬鬆
  • 當子類的方法實現父類的抽象方法時,方法的後置條件(返回值)要比父類更嚴格

從上面可以看出,當我們繼承父類時,不要覆蓋父類的已經實現好的方法(抽象方法),只能覆未實現好的方法(非抽象方法)。

為什麼不要覆蓋父類已經實現的方法呢?因為如果覆蓋了已經實現的方法後,子-父類會變得很耦合。

雖然繼承是面向物件的3大特徵之一,但是如果用得不好(替換父類已經實現的方法),會使程式變得複雜,變得更加耦合。

 

對這一原則,也沒好舉什麼例子出來了。

 

其他連結:

開放封閉原則(開閉原則)

單一職責原則

依賴倒置原則

介面隔離原則

里氏替換原則

迪米特法則