黎克特制替換原則

2021-08-19 15:45:00 字數 860 閱讀 1116

黎克特制替換原則:所有引用基類的地方必須能透明地使用其子類的物件。

黎克特制替換原則通俗的來講就是:子類可以擴充套件父類的功能,但不能改變父類原有的功能。

它包含以下4層含義:

1. 子類可以實現父類的抽象方法,但不能覆蓋父類的非抽象方法。

2. 子類中可以增加自己特有的方法。

3. 當子類的方法過載父類的方法時,方法的前置條件(即方法的形參)要比父類方法的輸入引數更寬鬆。

4. 當子類的方法實現父類的抽象方法時,方法的後置條件(即方法的返回值)要比父類更嚴格。

通俗的講就是,要父類 給子類

lsp的原定義比較複雜,我們一般對黎克特制替換原則 lsp的解釋為:子類物件能夠替換父類物件,而程式邏輯不變。黎克特制替換原則有至少以下兩種含義:1. 黎克特制替換原則是針對繼承而言的,如果繼承是為了實現**重用,也就是為了共享方法,那麼共享的父類方法就應該保持不變,不能被子類重新定義。子類只能通過新新增方法來擴充套件功能,父類和子類都可以例項化,而子類繼承的方法和父類是一樣的,父類呼叫方法的地方,子類也可以呼叫同乙個繼承得來的,邏輯和父類一致的方法,這時用子類物件將父類物件替換掉時,當然邏輯一致,相安無事。2. 如果繼承的目的是為了多型,而多型的前提就是子類覆蓋並重新定義父類的方法,為了符合lsp,我們應該將父類定義為抽象類,並定義抽象方法,讓子類重新定義這些方法,當父類是抽象類時,父類就是不能例項化,所以也不存在可例項化的父類物件在程式裡。也就不存在子類替換父類例項時邏輯不一致的可能。不符合lsp的最常見的情況是,父類和子類都是可例項化的非抽象類,且父類的方法被子類重新定義,這一類的實現繼承會造成父類和子類間的強耦合,也就是實際上並不相關的屬性和方法牽強附會在一起,不利於程式擴充套件和維護。 如何符合lsp?總結一句話 —— 就是盡量不要從可例項化的父類中繼承,而是要使用基於抽象類和介面的繼承。

黎克特制替換原則

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

黎克特制替換原則

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

黎克特制替換原則

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