面象物件設計6大原則之三:里氏替換原則
里氏替換原則(LSP),The Liskov Substitution Principle
定義
所有引用基類的地方必須能透明地引用其子類的物件,即子類可以擴充父類的功能,但不能修改父類已有的功能。
也就是說在父類出現的地方子類也可以出現,並且替換為子類也不會報錯,引用者根本不需要知道引用的是父類還是子類,但是反過來就行不通了,子類出現的地方父類就不一定能出現並代替子類。
里氏替換原則的特點:
1、子類可以擴充父類的功能,但不能修改父類已有的功能,如果修改了父類已有的功能,可能導致父類定義的功能在子類覆蓋後不適用。
2、過載父類的方法時,子類的方法形參應該比父類更寬鬆。
3、實現父類的抽象方法時,子類的方法輸出結果應該比父類更加嚴格。
4、子類可以有自己獨特的私有方法,但是需要注意的是,如果子類不能完全實現父類的方法,或者父類的某一些方法在子類中已經不適用,這種情況則建議斷開父子關係,使用組合等方式代替繼承出現。
里氏替換原則的優缺點:
1、合理得用類的繼承關係,提高了程式碼的複用性,但也增強了類與類之間的耦合性。
2、通過建立抽象,執行過程中具體實現取代抽象,保證了系統的可擴充性。
3、只要繼承父類就擁有父類的全部屬性和方法,這樣減少了程式碼重複建立量共享了程式碼但也約束了子類的行為,降低了系統靈活性。
我們平時開發中可能沒考慮這麼多,亂覆蓋父類的方法,沒有多少聯絡的繼承等很多打破了里氏替換的原則,這樣不顧後果的後果就是我們寫的程式存在著潛在的漏洞,而且出問題的機率也會顯著提升。
相關文章
- 設計模式六大原則(2):里氏替換原則設計模式
- 物件導向設計的六大原則(SOLID原則)-——里氏替換原則物件Solid
- 設計模式的七大原則(4) --里氏替換原則設計模式
- 面象物件設計6大原則之四:介面隔離原則物件
- 面象物件設計6大原則之五:依賴倒置原則物件
- 面象物件設計6大原則之一:單一職責原則物件
- 面象物件設計6大原則之二:開放封閉原則物件
- 里氏替換原則
- 軟體開發六大原則(三)-里氏替換原則
- 物件導向設計原則之里氏代換原則物件
- 嘻哈說:設計模式之里氏替換原則設計模式
- 設計模式六大原則(二)----裡式替換原則設計模式
- 物件導向設計6大原則物件
- Laravel深入學習10 – 里氏替換原則Laravel
- 物件導向設計的6大原則物件
- 設計原則之【裡式替換原則】
- 設計模式6大原則設計模式
- DesignPattern系列__04里氏替換原則
- S.O.I.L.D 之里氏替換原則
- [OOD]違反里氏替換原則的解決方案
- 設計模式六大原則(6):開閉原則設計模式
- 【設計原則】物件導向程式設計的六大原則物件程式設計
- 三 :LSP(里氏代換原則)
- 設計模式“6”大原則!設計模式
- C#中易混淆概念:解析里氏替換原則,虛方法C#
- Java的設計模式和6大原則Java設計模式
- 理解面對物件的六大原則物件
- 設計模式的七大原則(6) --迪米特法則設計模式
- 設計模式(一)——物件導向六大原則設計模式物件
- 設計模式六大原則(六)----開閉原則設計模式
- 「Android設計模式之旅」——設計模式的6大原則Android設計模式
- 遊戲設計的三大原則遊戲設計
- 設計類六大原則
- 設計模式之7大原則設計模式
- 設計模式-六大原則設計模式
- 設計模式七大原則設計模式
- 軟體設計7大原則
- 設計模式六大原則設計模式