設計模式七大原則之黎克特制替換原則

2021-10-02 11:48:15 字數 1133 閱讀 5930

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

換句話說:所有引用基類的地方必須能透明地使用其子類的物件

使用繼承是遵循黎克特制替換原則意味著:在子類中盡量不要重寫父類方法

繼承實際上讓兩個類的耦合性增強了,在適當的情況下,可以通過聚合,組合,依賴來解決問題。

package com.atguigu.principle.liskov;

public

class

liskov

}// a類

classa}

// b類繼承了a

// 增加了乙個新功能:完成兩個數相加,然後和9求和

class

bextends

apublic

intfunc2

(int a,

int b)

}

上述**中類b繼承了類a並重寫了類a的方法fun1,如果使用者在不知道這一點的情況下生成以型別b定義的物件b並呼叫fun1則程式得到錯誤的結果。

通用的做法是:原來的父類和子類都繼承乙個更通俗的基類,原有的繼承關係去掉,採用依賴 聚合 組合 等關係替代。

package com.atguigu.principle.liskov.improve;

public

class

liskov

}//建立乙個更加基礎的基類

class

base

// a類

class

aextends

base

}// b類

class

bextends

base

// 增加了乙個新功能:完成兩個數相加,然後和9求和

public

intfunc2

(int a,

int b)

//我們仍然想使用a的方法

public

intfunc3

(int a,

int b)

}

設計模式 七大原則之 黎克特制替換原則

任何能使用父類物件的地方,都應該能透明的替換為子類物件 也就說,子類物件可以隨時隨地替換父類物件,且替換完以後,語法不會報錯,業務邏輯也不會出現問題 反例 正方形不是長方形 1.提高 餓的重用性 2.多型的前提 主要看有沒有 is a 關係a.主要看有沒有 is a 關係 b.在兩個類有了is a關...

設計模式七大原則之黎克特制替換原則

黎克特制替換原則 所有引用基類的地方,必須能透明的使用其子類的物件。通俗的理解 子類可以擴充套件父類的功能,但不能改變父類原有的功能。示例 1 電腦 2public abstract class computer36 7 8 膝上型電腦 9 10class laptopcommputer compu...

設計模式七大原則之黎克特制替換原則

ioo中的繼承性的思考和說明 繼承包含這樣一層含義 父類中凡是已經實現好的方法,實際上是在設定規範和契約,雖然它不強制要求所有的子類必須遵循這些契約,但是如果子類對這些已經實現的方法任意修改,就會對整個繼承體系造成破壞。繼承在給程式設計帶來便利的同時,也帶來了弊端。比如使用繼承會給程式帶來侵入性,程...