黎克特制替換原則

2021-09-25 09:31:31 字數 955 閱讀 6606

如果對每乙個型別為t1的物件o1,都有型別為t2的物件o2,使得以t1定義的所有程式p在所有的物件o1都替換成o2時,程式p的行為沒有發生變化,那麼型別t2是型別t1的子型別。

定義擴充套件

乙個軟體實體如果適用乙個父類的話,那一定適用於其子類,所有引用父類的地方必須能透明地使用其子類的物件,子類物件能夠替換父類物件,而程式邏輯不變。

引申意義

繼承作為物件導向的特性,給我們設計程式帶來了遍歷,也帶來了弊端,比如使用繼承會給程式帶來侵入性,可移植性也會降低,增加物件的耦合;

優點

主要研究一下繼承入參和出參帶來的差異

1.

public class base 

}

public class child extends base 

}

這種方式是重寫,那麼如果child物件執行test方法必定執行的是子類的test的方法。

2.父類還是原來的入參,子類擴大範圍

public class child extends base 

}

那麼如果child物件執行test方法執行的是父類的test的方法。這種方式是符合黎克特制原則的,子類的方法沒有覆蓋父類的非抽象方法。

3.父類的入參範圍小,子類的入參範圍大

public class base 

}

public class child extends base 

}

這樣子方式執行子類的test方法執行的是子類的方法,這就違反了黎克特制原則,有可能會帶來混亂。

1. 介面的返回值小,實現類的返回值大,編譯出錯;

2. 介面的返回值大,實現類的返回值小,順利執行;

黎克特制替換原則

黎克特制替換原則 黎克特制代換原則 liskov substitution principle lsp 物件導向設計的基本原則之一。黎克特制代換原則中說,任何基類可以出現的地方,子類一定可以出現。lsp是繼承復用的基石,只有當衍生類可以替換掉基類,軟體單位的功能不受到影響時,基類才能真正被復用,而衍...

黎克特制替換原則

黎克特制替換原則更多的說的是子類與父類的關係的一種原則,子類必須實現父類的所有方法,所有能夠放子類的地方一定能夠放父類。但是這裡的話,我們講有的時候在我們的業務中,有的子類肯定是有個性化的特徵的,比如真槍和玩具槍,真槍能射出子彈,但是玩具槍就不能,那麼這個時候,我們或者通過抽象類,通過抽象類是我們可...

黎克特制替換原則

黎克特制替換原則,主要是乙個關於繼承的規範原則,它要求我們在軟體中寫繼承關係時,所有引用父類的地方必須能夠 透 明地使用其子類物件 子類可以實現父類所提供的抽象 方法,但不要去重寫父類已經實現的方法,或者過載父類的 構 造。要維護繼承的傳遞性,當然很多地方為這個原則打了個 比喻為 龍生龍,鳳生鳳,老...