黎克特制替換原則

2021-08-24 18:00:24 字數 856 閱讀 6842

定義:所有引用基類的地方必須能透明地使用其子類的物件(父類都可以用子類來代替,但不能改變父類原有的功能,在子類中可以任意擴充套件功能)

問題描述:有一功能p1,由類a完成。現需要將功能p1進行擴充套件,擴充套件後的功能為p,其中p由原有功能p1與新功能p2組成。新功能p由類a的子類b來完成,則子類b在完成新功能p2的同時,有可能會導致原有功能p1發生故障。

**描述:

package com.hc.www;

class a1

}class b1 extends a1

public int func2(int a, int b)

}public class ceshi

}結果:(結果不符合預期)

100-50=150

100-80=180

100+20+100=220

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

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

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

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

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

缺點:(繼承的缺點)

優點:提高**的重用性,擴充套件性

lsp(黎克特制替換原則)與多型:

1、lsp只是針對繼承來說,父類和子類均可例項化,主要是共享父類方法,子類不覆蓋父類方法

2、繼承如果是為了多型,那麼多型前提就是父類重寫子類方法,為了符合lsp,父類就應該定義為抽象類,並定義抽象方法,所以就不存在子類替換父類時邏輯不一致的可能。

黎克特制替換原則

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

黎克特制替換原則

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

黎克特制替換原則

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