我們知道,物件導向的語言的三大特點是繼承,封裝,多型,黎克特制替換原則就是依賴於繼承,多型這兩大特性。黎克特制替換原則簡單來說就是,所有引用基類的地方必須能透明地使用其子類的物件。通俗點講,只要父類能出現的地方子類就可以出現,而且替換為子類也不會產生任何錯誤或異常,使用者可能根本就不需要知道是父類還是子類。但是,反過來就不行了,有子類出現的地方,就兩個字:抽象。
//視窗類
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 物件導向設計的基本原則之一。黎克特制代換原則中說,任何基類可以出現的地方,子類一定可以出現 並且完全察覺不出父類物件和子類物件的區別。黎克特制代換原則是乙個規範性原則,它是繼承復用的基石。只有按照這個...