裡式替換原則主要闡述了繼承的一些原則,也就是什麼時候使用繼承,什麼時候不應該使用繼承,以及其中蘊含的原理。裡式替換原是繼承復用的基礎,它反映了基類與子類之間的關係,是對開閉原則的補充,是對實現抽象化的具體步驟的規範。
裡式替換原則的作用
裡式替換原則的主要作用如下:
裡式替換原則是實現開閉原則的重要方式之一,它克服了繼承中重寫父類造成的可復用性變差的缺點,他是動作正確性的保證。即類的擴充套件不會給已有的系統引入新的錯誤,降低了**出錯的可能性。
裡式替換原則的實現方法:
裡式替換原則通俗的來講就是:子類可以擴充套件父類的功能 ,但是不能改變父類原有的功能,也就是說:子類繼承父類時,處新增新的方法完成新增功能外,盡量不要重寫父類的方法。
所有利用基類 的地方必須能透明的使用其子類的物件(簡單的說,子類可以替換父類,執行結果沒有改變)
作用:用來是繼承的優勢更加明顯,缺點更加少。
繼承有一些優點:
1.提高**的重用性,子類擁有父類的方法和屬性
2.提高**的可擴充套件性,子類可形似於父類,但異於父類,保留自我的特性;
缺點:侵入性、不夠靈活、高耦合
(繼承是侵入性的,只要繼承就必須擁有父類的所有方法和屬性,在一定程度上約束了子類,降低了**的靈活性)
3.增加了耦合,當父類的常量 ,變數或者方法被修改了,需要考慮子類的修改,所以一旦父類有了變動,很可能會造成非常糟糕的結果,要重構大量的**。
任何基類可以出現的地方,子類一定可以出現,裡式替換原則是繼承復用的基石,只有當衍生類可以替換基類,軟體單位的功能不受到影響時,即基類隨便怎樣改動子類都不受此影響,那麼基類才能真正被復用。
因為繼承帶來的侵入性,增加了耦合性,也降低了**的靈活性,父類修改**,子類也會受到影響,此時就需要 裡式替換原則。
*子類必須實現父類的抽象方法 ,但 不得重寫(覆蓋 )父類的非抽象(已實現)方法。
*子類中可以增加自己特有的方法。
*當子類覆蓋或實現父類的方法時,方法的前置條件(即方法的形參)要比父類方法的輸入引數更寬鬆。
*當子類 的方法實現父類的抽象方法時,方法的後置條件(即方法的返回值)要比父類更嚴格(就是return的型別,如果父類 時double,那麼子類需要是double或者小於 double的範圍,比如int)
裡式替換原則
要點 在子類中盡量不要重寫父類的方法 舊版 public class liskov a類 class a b類繼承了a 增加了乙個新功能 完成兩個數相加,然後和9求和 class b extends a public int func2 int a,int b 結果 11 3 8 1 8 7 11 ...
裡式替換原則
以前認為裡式替換原則就是父類的出現的地方子類就能出現,和多型沒有多大的區別,這是錯誤的看法,應該再加上一句,不改變原來程式的邏輯。常見三類違背裡式替換的情況 1 子類違背父類宣告的功能 比如父類某個方法實現的是按照 排序,子類修改為按照時間排序 2 子類違背父類對輸入,輸出,異常的規定 輸入 子類對...
設計原則之里式替換原則
前言 最近降溫很厲害,走在路上呼呼的狂風刮在臉上,讓我無比懷戀家鄉的溫暖。現在要求自己早點休息,所以寫部落格的時間也從午夜變到了上午。今天就來聊一聊裡式替換原則吧 1 裡式替換原則是什麼 關於裡式這次詞語的由來,主要是因為這個原則是以為姓裡的女士提出的,所以叫里式。關於這個原則,在實際開發的時候,就...