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

2021-10-23 17:09:32 字數 1742 閱讀 1166

任何能使用父類物件的地方,都應該能透明的替換為子類物件

也就說,子類物件可以隨時隨地替換父類物件,且替換完以後, 語法不會報錯,業務邏輯也不會出現問題!

反例(正方形不是長方形):

1. 提高**餓的重用性

2. 多型的前提

主要看有沒有"is a" 關係
a. 主要看有沒有"is a" 關係

b. 在兩個類有了is a關係之後,還要考慮子類物件在替換了父類物件之後,業務邏輯是否變化,如果變化,則不能發生繼承關係

長方形

//長方形

class

rectangle

public

void

setlength

(double length)

public

double

getwidth()

public

void

setwidth

(double width)

@override

public string tostring()

';}}

正方形繼承長方形

class

square

extends

rectangle

@override

public

void

setlength

(double length)

@override

public

double

getwidth()

@override

public

void

setwidth

(double width)

}

工具類迴圈讓寬累加直到大於高1

class

utils

}}

測試

替換成子類物件(多型) rectangle r = new square();

此時業務邏輯出現了問題, 我們原本只要迴圈到寬大於高1,但是更改為子類後,確變成了死迴圈所有說正方形不是長方形.

正例:

class

square

public

void

setlength

(double length)

public

double

getwidth()

public

void

setwidth

(double width)

}

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

如果對每個型別為t1 的物件 o1,都有型別為t2的物件o2,使得以t1定義的所以程式p中所有的物件o1都代換為o2時,程式p的行為不發生變化,那麼型別t2是型別t1的子型別。換句話說 所有引用基類的地方必須能透明地使用其子類的物件 使用繼承是遵循黎克特制替換原則意味著 在子類中盡量不要重寫父類方法...

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

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

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

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