黎克特制替換原是繼承復用的基礎,它反映了基類與子類之間的關係,是對開閉原則的補充,是對實現抽象化的具體步驟的規範。
所有引用基類(父類)的地方必須能透明地使用其子類的物件。
黎克特制替換原則的主要作用如下。
黎克特制替換原則是實現開閉原則的重要方式之一。
它克服了繼承中重寫父類造成的可復用性變差的缺點。
它是動作正確性的保證。即類的擴充套件不會給已有的系統引入新的錯誤,降低了**出錯的可能性。
加強程式的健壯性,同時變更時可以做到非常好的相容性,提高程式的維護性、可擴充套件性,降低需求變更時引入的風險。
黎克特制替換原則通俗來講就是:子類可以擴充套件父類的功能,但不能改變父類原有的功能。也就是說:子類繼承父類時,除新增新的方法完成新增功能外,盡量不要重寫父類的方法。
根據上述理解,對黎克特制替換原則的定義可以總結如下:
通過重寫父類的方法來完成新的功能寫起來雖然簡單,但是整個繼承體系的可復用性會比較差,特別是運用多型比較頻繁時,程式執行出錯的概率會非常大。
如果程式違背了黎克特制替換原則,則繼承類的物件在基類出現的地方會出現執行錯誤。這時其修正方法是:取消原來的繼承關係,重新設計它們之間的關係。
【例1】黎克特制替換原則在「幾維鳥不是鳥」例項中的應用。
分析:鳥一般都會飛行,如燕子的飛行速度大概是每小時 120 千公尺。但是紐西蘭的幾維鳥由於翅膀退化無法飛行。假如要設計乙個例項,計算這兩種鳥飛行 300 千公尺要花費的時間。顯然,拿燕子來測試這段**,結果正確,能計算出所需要的時間;但拿幾維鳥來測試,結果會發生「除零異常」或是「無窮大」,明顯不符合預期,其類圖如圖 1 所示。
}}//鳥類
class bird
public double getflytime(double distance)
}//燕子類
class swallow extends bird
//幾維鳥類
class brownkiwi extends bird
}
黎克特制替換原則
黎克特制替換原則 黎克特制代換原則 liskov substitution principle lsp 物件導向設計的基本原則之一。黎克特制代換原則中說,任何基類可以出現的地方,子類一定可以出現。lsp是繼承復用的基石,只有當衍生類可以替換掉基類,軟體單位的功能不受到影響時,基類才能真正被復用,而衍...
黎克特制替換原則
黎克特制替換原則更多的說的是子類與父類的關係的一種原則,子類必須實現父類的所有方法,所有能夠放子類的地方一定能夠放父類。但是這裡的話,我們講有的時候在我們的業務中,有的子類肯定是有個性化的特徵的,比如真槍和玩具槍,真槍能射出子彈,但是玩具槍就不能,那麼這個時候,我們或者通過抽象類,通過抽象類是我們可...
黎克特制替換原則
黎克特制替換原則,主要是乙個關於繼承的規範原則,它要求我們在軟體中寫繼承關係時,所有引用父類的地方必須能夠 透 明地使用其子類物件 子類可以實現父類所提供的抽象 方法,但不要去重寫父類已經實現的方法,或者過載父類的 構 造。要維護繼承的傳遞性,當然很多地方為這個原則打了個 比喻為 龍生龍,鳳生鳳,老...