設計模式的七大設計原則 其四 黎克特制替換原則

2021-09-25 16:15:40 字數 1115 閱讀 3035

1)繼承包含這樣一層含義:父類中凡是已經實現好的方法,實際上時在是設定規範和契約,雖然它不強制要求所有的子類必須遵循這些契約,但是如果子類對這些已經實現的方法任意修改,就會對整體繼承體系造成破壞

2)繼承在給程式設計帶來便利的同時,也帶來弊端。比如使用繼承會給程式帶來侵入性,程式的可移植性降低,增加物件間耦合性,如果乙個類被其他的類所繼承,則當這個類需要修改時,必須考慮到所有的子類,並且父類修改後,所以涉及到子類的功能都有可能產生故障

3)問題提出:在程式設計中,如何正確的使用繼承?==》黎克特制替換原則

1.黎克特制替換原則(liskov substitution principle) 在2023年,由麻省理工學院的以為姓裡的女士提出的。

2.如果對每個型別為t1的物件o1,都有型別為t2的物件o2,使得以t1定義的所有程式p在所有的物件o1都代換成o2時,程式p的行為沒有發生變化,那麼型別t2是型別t1的子型別。換句話說,所有引用基本型別的地方必須能透明地使用其子類的物件。

3.在使用繼承時,遵循黎克特制替換原則,在子類中盡量不要重寫父類的方法。

4.黎克特制替換原則告訴我們,繼承實際上讓兩個類的耦合性增強了,在適當的情況下,可以通過聚合,組合,依賴來解決問題。

1.main方法中的b的結果就是不正確的,原因是因為b中繼承a的時候,不小心重寫了a中的方法導致。

package liskov;

public class liskov

}class a

}class b extends a

public int func2(int num1,int num2)

}

2.改進,如果b要重寫a的方法,那麼提出乙個基類,b和a都繼承基類,同時b使用組合關係來解決繼承a的問題。

package liskov.improve;

public class liskov

}class base

class a extends base

}class b extends base

public int func2(int num1,int num2)

public int func3(int num1,int num2)

}

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

三 注意事項和細節 參考我們平時說的繼承,它有另一層含義 黎克特制替換原則定義 我們使用乙個加減法的例子來說明 建立a類,使其實現減法功能 classa public class client 執行結果為 100 50 50 現在新增乙個新功能,使兩數相加後再與100相加,且這個功能由b類實現,所以...

細說設計模式七大原則(4) 黎克特制替換原則

英文名 the liskov substitution principle,liskov 黎克特制替換原則通俗的來講就是 子類可以擴充套件父類的功能,但不能改變父類原有的功能。它包含以下4層含義 問題由來 有一功能p1,由類a完成。現需要將功能p1進行擴充套件,擴充套件後的功能為p,其中p由原有功能...

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

定義 如果對某個型別為t1的物件o1,都有型別t2的物件o2,使得以t1定義的所有程式p中在所有的物件o1都替換成o2時,程式p的行為不會發生改變,那麼型別型別t2是型別t1的子型別。也就是說,程式中所有引用父類的地方必須可以透明地使用其子類的物件 在程式中如何遵循黎克特制替換原則 1 在子類中盡量...