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 在子類中盡量...