新聞中心
這篇文章主要介紹里氏代換原則是什么,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
里氏代換原則
里氏替換原則LSP講的是基類和子類的關(guān)系。只有當(dāng)這種關(guān)系存在時(shí),里氏代換關(guān)系才存在。如果兩個(gè)具體的類A,B之間的關(guān)系違反了LSP的設(shè)計(jì),(假設(shè)是從B到A的繼承關(guān)系)那么根據(jù)具體的情況可以在下面的兩種重構(gòu)方案中選擇一種。
func1(100,50); //運(yùn)行結(jié)果100-50=50
后來,我們需要增加一個(gè)新的功能:完成兩數(shù)相加,然后再與100求和,由類B來負(fù)責(zé)。即類B需要完成兩個(gè)功能:
采用類B繼承類A代碼如下:
class b extends a{ public function func1($a, $b){ return $a + $b; } public function func2($a, $b){ return $this->func1($a, $b) + 100; } } $b = new b(); echo $b->func2(100, 50);
假設(shè)類B在給方法起名時(shí)無意中重寫了父類的方法,造成所有運(yùn)行相減功能的代碼全部調(diào)用了類B重寫后的方法,造成原本運(yùn)行正常的功能fun1出現(xiàn)了錯(cuò)誤(錯(cuò)誤的原因是減法變成了加法而其他使用者并不知道。別總想著代碼是一個(gè)人寫的呦!還有大家沒有時(shí)間去逐行讀你的代碼,他們只是按照規(guī)則進(jìn)行應(yīng)用)。
里氏替換原則通俗的來講就是:子類可以擴(kuò)展父類的功能,但不能改變父類原有的功能。它包含以下4層含義:
1、子類可以實(shí)現(xiàn)父類的抽象方法,但不能覆蓋父類的非抽象方法。
2、子類中可以增加自己特有的方法。
3、當(dāng)子類的方法重載父類的方法時(shí),方法的前置條件(即方法的形參)要比父類方法的輸入?yún)?shù)更寬松。
4、當(dāng)子類的方法實(shí)現(xiàn)父類的抽象方法時(shí),方法的后置條件(即方法的返回值)要比父類更嚴(yán)格。
看上去很不可思議,因?yàn)槲覀儠?huì)發(fā)現(xiàn)在自己編程中常常會(huì)違反里氏替換原則,程序照樣跑的好好的。所以大家都會(huì)產(chǎn)生這樣的疑問,假如我非要不遵循里氏替換原則會(huì)有什么后果?
后果就是:你寫的代碼出問題的幾率將會(huì)大大增加。
以上是里氏代換原則是什么的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
文章標(biāo)題:里氏代換原則是什么-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://fisionsoft.com.cn/article/deopci.html