黎克特制置換原則
黎克特制置換原則的兩種定義:定義一:
如果對於每乙個型別是s的物件o1,都有型別為t的物件o2,使得用t定義的所有程式p在所有物件o1都代換成o2時,
程式p並沒有什麼變化,那麼s就是t的子型別。
定義二:
所有引用基類的地方必須能夠透明的使用其子類的物件。
通俗的說:只要是父類能夠出現的地方子類就可以出現而且把父類替換為子類也不會產生任何的錯誤或者異常。反過來不可以子類出現的地方,出現父類。
為了達到這個目的,實現這個原則,我們需要遵守四條規則:即 糾紛不斷,規則壓制
1.子類必須完全實現父類的所有方法。
子類不可以只實現部分方法,或者空實現。
如果不能完整的實現父類的方法,或者父類的方法在子類中發生了畸變,那麼建議放棄繼承關係,改為依賴,聚合,組成等關係代替繼承。
2.子類可以有自己的個性
子類可以有自己獨特的行為,這也證明了子類出現的地方父類不一定能夠勝任。
3.覆蓋或者實現父類方法的時輸入引數可以被擴大
要求:子類中方法的前置條件必須和超類中被覆寫的方法的前置條件相同或者更寬鬆。
如果子類的方法輸入引數的範圍大於父類中被覆寫方法的範圍,那麼當父類存在的地方被替換為子類後,程式不會變化。**如下:
父類:father();
}子類:son extends father();
}map的範圍大於hashmap,那麼當父類被替換成子類,
即用父類物件去呼叫父類方法和用子類物件呼叫都會呼叫父類中的方法。
main()
如果相反,子類的範圍小於父類,當父類物件被置換為子類,那
麼很可能就會進入子類的方法中,
父類:father(); }
子類:son extends father(); }
main()
4.覆寫或者實現父類中的方法時輸出結果可以被縮小
黎克特制置換原則
黎克特制置換原則的兩種定義:定義一:
如果對於每乙個型別是s的物件o1,都有型別為t的物件o2,使得用t定義的所有程式p在所有物件o1都代換成o2時,
程式p並沒有什麼變化,那麼s就是t的子型別。
定義二:
所有引用基類的地方必須能夠透明的使用其子類的物件。
通俗的說:只要是父類能夠出現的地方子類就可以出現而且把父類替換為子類也不會產生任何的錯誤或者異常。反過來不可以子類出現的地方,出現父類。
為了達到這個目的,實現這個原則,我們需要遵守四條規則:即 糾紛不斷,規則壓制
1.子類必須完全實現父類的所有方法。
子類不可以只實現部分方法,或者空實現。
如果不能完整的實現父類的方法,或者父類的方法在子類中發生了畸變,那麼建議放棄繼承關係,改為依賴,聚合,組成等關係代替繼承。
2.子類可以有自己的個性
子類可以有自己獨特的行為,這也證明了子類出現的地方父類不一定能夠勝任。
3.覆蓋或者實現父類方法的時輸入引數可以被擴大
要求:子類中方法的前置條件必須和超類中被覆寫的方法的前置條件相同或者更寬鬆。
如果子類的方法輸入引數的範圍大於父類中被覆寫方法的範圍,那麼當父類存在的地方被替換為子類後,程式不會變化。**如下:
父類:father(); }
子類:son extends father(); }
map的範圍大於hashmap,那麼當父類被替換成子類,
即用父類物件去呼叫父類方法和用子類物件呼叫都會呼叫父類中的方法。
main()
如果相反,子類的範圍小於父類,當父類物件被置換為子類,那
麼很可能就會進入子類的方法中,
父類:father(); }
子類:son extends father(); }
main()
4.覆寫或者實現父類中的方法時輸出結果可以被縮小
設計模式七大原則之黎克特制替換原則
如果對每個型別為t1 的物件 o1,都有型別為t2的物件o2,使得以t1定義的所以程式p中所有的物件o1都代換為o2時,程式p的行為不發生變化,那麼型別t2是型別t1的子型別。換句話說 所有引用基類的地方必須能透明地使用其子類的物件 使用繼承是遵循黎克特制替換原則意味著 在子類中盡量不要重寫父類方法...
設計模式 七大原則之 黎克特制替換原則
任何能使用父類物件的地方,都應該能透明的替換為子類物件 也就說,子類物件可以隨時隨地替換父類物件,且替換完以後,語法不會報錯,業務邏輯也不會出現問題 反例 正方形不是長方形 1.提高 餓的重用性 2.多型的前提 主要看有沒有 is a 關係a.主要看有沒有 is a 關係 b.在兩個類有了is a關...
設計模式七大原則之黎克特制替換原則
黎克特制替換原則 所有引用基類的地方,必須能透明的使用其子類的物件。通俗的理解 子類可以擴充套件父類的功能,但不能改變父類原有的功能。示例 1 電腦 2public abstract class computer36 7 8 膝上型電腦 9 10class laptopcommputer compu...