面象对象设计6大原则之三:里氏替换原则
轉(zhuǎn)載自?面象對(duì)象設(shè)計(jì)6大原則之三:里氏替換原則
里氏替換原則(LSP),The Liskov Substitution Principle
定義
所有引用基類的地方必須能透明地引用其子類的對(duì)象,即子類可以拓展父類的功能,但不能修改父類已有的功能。
也就是說在父類出現(xiàn)的地方子類也可以出現(xiàn),并且替換為子類也不會(huì)報(bào)錯(cuò),引用者根本不需要知道引用的是父類還是子類,但是反過來就行不通了,子類出現(xiàn)的地方父類就不一定能出現(xiàn)并代替子類。
里氏替換原則的特點(diǎn):
1、子類可以拓展父類的功能,但不能修改父類已有的功能,如果修改了父類已有的功能,可能導(dǎo)致父類定義的功能在子類覆蓋后不適用。
2、重載父類的方法時(shí),子類的方法形參應(yīng)該比父類更寬松。
3、實(shí)現(xiàn)父類的抽象方法時(shí),子類的方法輸出結(jié)果應(yīng)該比父類更加嚴(yán)格。
4、子類可以有自己獨(dú)特的私有方法,但是需要注意的是,如果子類不能完全實(shí)現(xiàn)父類的方法,或者父類的某一些方法在子類中已經(jīng)不適用,這種情況則建議斷開父子關(guān)系,使用組合等方式代替繼承出現(xiàn)。
里氏替換原則的優(yōu)缺點(diǎn):
1、合理得用類的繼承關(guān)系,提高了代碼的復(fù)用性,但也增強(qiáng)了類與類之間的耦合性。
2、通過建立抽象,運(yùn)行過程中具體實(shí)現(xiàn)取代抽象,保證了系統(tǒng)的可拓展性。
3、只要繼承父類就擁有父類的全部屬性和方法,這樣減少了代碼重復(fù)創(chuàng)建量共享了代碼但也約束了子類的行為,降低了系統(tǒng)靈活性。
我們平時(shí)開發(fā)中可能沒考慮這么多,亂覆蓋父類的方法,沒有多少聯(lián)系的繼承等很多打破了里氏替換的原則,這樣不顧后果的后果就是我們寫的程序存在著潛在的漏洞,而且出問題的機(jī)率也會(huì)顯著提升。
總結(jié)
以上是生活随笔為你收集整理的面象对象设计6大原则之三:里氏替换原则的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面象对象设计6大原则之二:开放封闭原则
- 下一篇: 面象对象设计6大原则之四:接口隔离原则