物件導向六大原則之黎克特制替換原則

2021-08-08 23:05:08 字數 1183 閱讀 8481

我們知道,物件導向的語言的三大特點是繼承,封裝,多型,黎克特制替換原則就是依賴於繼承,多型這兩大特性。黎克特制替換原則簡單來說就是,所有引用基類的地方必須能透明地使用其子類的物件。

通俗點講,只要父類能出現的地方子類就可以出現,而且替換為子類也不會產生任何錯誤或異常,使用者可能根本就不需要知道是父類還是子類。但是,反過來就不行了,有子類出現的地方,就兩個字:抽象。

//視窗類

public

class

window

}//建立檢視抽象,測量檢視的寬高為公用**,繪製實現交給具體的子類

public

abstract

class

view

} //按鈕類的具體實現

public

class

button

extends

view

}//textview的具體實現

public

class

textview

extends

view

}

上述示例中,window依賴於view,而view定義乙個檢視抽象,measure是各個子類共享的方法,子類通過覆寫view的draw方法實現具有各自特色的功能,在這裡,這個功能就是繪製自身的記憶體。任何繼承自view類的子類都可以設定個show方法,就是所說的黎克特制替換。通過黎克特制替換,就可以自定義各式各樣,千變萬化的view,然後傳遞給window,window負責組織view,並且將view顯示到螢幕上。

黎克特制替換原則的核心原理是抽象,抽象有依賴於繼承這個特性,在oop當中,繼承的優缺點都相當明顯。

優點
(1)**重用,減少建立類的成本,每個子類都擁有父類的方法和屬性

(2)子類與父類基本相似,但又與父類有所區別

(3)提高**的可擴充套件性

缺點
(1)繼承是侵入性的,只要繼承就必須擁有父類的所有屬性和方法

(2)可能造成子類**多餘,靈活性降低,因為子類必須擁有父類的屬性和方法。

黎克特制替換原則一句話表達就是:建立抽象,通過抽象建立規範,具體的實現在執行時替換掉抽象,保證系統的擴充套件性和靈活性

六大原則之黎克特制替換原則

如果對乙個型別為s的物件o1,都有型別為t的物件o2,使得以s定義的所有程式p 中所有的物件o1都替換成o2是,程式p的行為沒有發生變化,那麼型別t是型別s的子型別。按照黎克特制替換原則,當多個類之間存在繼承關係時,通常應該使用父類或介面來指向子類的物件,這樣有利於提高系統的可擴充套件性。我們都知道...

六大原則之黎克特制替換

package com.study public class liskov 類 a classa class bextends apublic intfunc2 int a,int b 問題說明 上面的 出現了意外情況,原因就是類 b 無意中重寫了父類的方法,造成原有功能出現錯誤。在實際程式設計中,...

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

設計模式總覽 黎克特制代換原則 liskov substitution principle lsp 物件導向設計的基本原則之一。黎克特制代換原則中說,任何基類可以出現的地方,子類一定可以出現 並且完全察覺不出父類物件和子類物件的區別。黎克特制代換原則是乙個規範性原則,它是繼承復用的基石。只有按照這個...