裡氏替換原則
說的就是面向對象語言的繼承
--->代碼共享,減少建立類的工作量,每個子類都擁有父類的方法和屬性。
--->提高代碼的重用性。
--->子類可以形似父類,但又特殊于父類。
--->提高代碼的可擴充性。實作父類的方法,可以為所欲為。許多開源架構的接口都是繼承父類完成的。
--->提高産品或項目的開放性。
--->繼承是侵入性的。子類必須擁有父類的屬性和方法。讓子類自由的世界中多了些限制。
--->增強了耦合性。當父類的常量,變量和方法被修改時,需要考慮子類的修改。造成混亂。
裡氏替換原則的定義
第一種定義:如果對于每一個類型為S(子類)的對象01,都有類型為T(父類)的對象02,使得以T(父類)定義的所有程式P所在的對象01都替換成02時,程式P的行為沒有發生變化,那麼類型S是類型T的子類型。
第二種定義:所有引用基類(父類)的地方必須能透明地使用其子類的對象。通俗講,就是隻要父類能出現的地方子類就可以出現,而且替換成子類也不會産生任何錯誤或異常。使用者可能根本就不需要知道是父類還是子類。但是,反過來就不行了,有子類出現的地方,父類未必就能适應。
裡氏替換原則的規範
---->子類必須完全實作父類的方法。
---->子類可以有自己的個性。
---->覆寫或實作父類的方法時,同名字的方法的輸入參數可以被放大。(參數類型可以是父類參數類型的父輩級别的類型),但這不是重寫,而是重載。
---->覆寫或實作弗雷的方法時輸出結果可以被縮小(傳回結果,子類的傳回類型可以是父類傳回類型的子類輩)
裡氏替換原則的目的
--->就是增強程式的健壯性,版本更新時也可以保持非常好的相容性。即使增加子類,原有的子類還可以繼續運作。在實際項目中,每個子類對應不同的業務含義,使用父類作為參數,傳遞不同的子類完成不同的業務邏輯,非常完美。