黎克特制替換原則(lsp),the liskov substitution principle
定義
所有引用基類的地方必須能透明地引用其子類的物件,即子類可以拓展父類的功能,但不能修改父類已有的功能。
也就是說在父類出現的地方子類也可以出現,並且替換為子類也不會報錯,引用者根本不需要知道引用的是父類還是子類,但是反過來就行不通了,子類出現的地方父類就不一定能出現並代替子類。
黎克特制替換原則的特點:
1、子類可以拓展父類的功能,但不能修改父類已有的功能,如果修改了父類已有的功能,可能導致父類定義的功能在子類覆蓋後不適用。
2、過載父類的方法時,子類的方法形參應該比父類更寬鬆。
3、實現父類的抽象方法時,子類的方法輸出結果應該比父類更加嚴格。
4、子類可以有自己獨特的私有方法,但是需要注意的是,如果子類不能完全實現父類的方法,或者父類的某一些方法在子類中已經不適用,這種情況則建議斷開父子關係,使用組合等方式代替繼承出現。
黎克特制替換原則的優缺點:
1、合理得用類的繼承關係,提高了**的復用性,但也增強了類與類之間的耦合性。
2、通過建立抽象,執行過程中具體實現取代抽象,保證了系統的可拓展性。
3、只要繼承父類就擁有父類的全部屬性和方法,這樣減少了**重複建立量共享了**但也約束了子類的行為,降低了系統靈活性。
我們平時開發中可能沒考慮這麼多,亂覆蓋父類的方法,沒有多少聯絡的繼承等很多打破了黎克特制替換的原則,這樣不顧後果的後果就是我們寫的程式存在著潛在的漏洞,而且出問題的機率也會顯著提公升。
設計模式六大原則(三)黎克特制替換原則
定義 所有使用父類的地方都必須可以使用其子類。規定 1.不能重寫父類非抽象方法。2.子類中可以增加自己的特性。3.無論是重寫還是過載,如與父類衝突,必須保證執行父類的方法。特點 1.能用子類的地方不一定能用父類 2.能用父類的地方一定能用子類 舉例子 建立乙個家族 public abstract c...
設計模式六大原則(2) 黎克特制替換原則
肯定有不少人跟我剛看到這項原則的時候一樣,對這個原則的名字充滿疑惑。其實原因就是這項原則最早是在1988年,由麻省理工學院的一位姓裡的女士 barbara liskov 提出來的。定義1 如果對每乙個型別為 t1的物件 o1,都有型別為 t2 的物件o2,使得以 t1定義的所有程式 p 在所有的物件...
設計模式六大原則(2) 黎克特制替換原則
肯定有不少人跟我剛看到這項原則的時候一樣,對這個原則的名字充滿疑惑。其實原因就是這項原則最早是在1988年,由麻省理工學院的一位姓裡的女士 barbara liskov 提出來的。定義1 如果對每乙個型別為 t1的物件 o1,都有型別為 t2 的物件o2,使得以 t1定義的所有程式 p 在所有的物件...