黎克特制替換原則lsp(liskov substitution principle)主要闡述了有關繼承的一些原則。子類可以擴充套件父類的功能,但不能改變父類原有的功能,如果重寫了父類的方法,就會降低整個繼承體系的復用性,如果違背了黎克特制替換原則,就很有可能出現執行錯誤
這裡以乙個鳥的例子來闡述:
首先定義乙個超類鳥,它具有飛行速度的屬性和飛的功能,然後設計兩個子類,乙個是燕子,乙個是企鵝,這兩個動物都是鳥類,但是企鵝不會飛,首先我們以普通的方式來演示繼承關係,並實現飛行測試
public class bird
//設定鳥的飛行速度
public void setspeed(double speed)
}
public class swallow extends bird
public class penguin extends bird
}
public class main
}
這樣執行的結果如下圖,企鵝需要的時間是infinity,這是不符合邏輯的
下面來解決此問題,也就是李氏替換原則,不要重寫,給企鵝定義自己的方法,也就是走
public class animal
public class bird extends animal
//設定鳥的飛行速度
public void setspeed(double speed)
}
public class swallow extends bird
/**
* 這裡直接繼承animal,因為它不具有飛的功能
*/public class penguin extends animal
public double getspeedtime(double d)
}
public class main
}
執行結果:
總結一句話,黎克特制替換主要解決,什麼時候應該使用繼承,什麼時候不應該使用繼承的問題!
物件導向設計原則 黎克特制替換原則
黎克特制替換原則是任何基類出現的地方,子類一定可以替換它 是建立在基於抽象 多型 繼承的基礎復用的基石,該原則能夠保證系統具有良好的拓展性,同時實現基於多型的抽象機制,能夠減少 冗餘。黎克特制替換原則要求我們在編碼時使用基類或介面去定義物件變數,使用時可以由具體實現物件進行賦值,實現變化的多樣性,完...
物件導向設計 黎克特制替換原則
黎克特制替換原則 liskov substitution principle,lsp 是指如果對每乙個型別為t的物件o,都有型別為t1的物件o1,使得以t定義的所有程式p在所有的物件o替換為o1是,程式p的行為沒有發生變化,那麼型別t1是型別t的子類。通俗理解是 中任何父類物件可以出現的地方,子類都...
物件導向設計原則 黎克特制替換原則 LSP
要 求 子類可以替換父類並且出現在父類能夠出現的任何地方 這個原則也是在貫徹gof倡導的面向介面程式設計!在這個原則中父類應盡可能使用介面或者抽象類來實現!子類通過實現了父類介面,能夠替父類的使用地方!通過這個原則,我們客戶端在使用父類介面的時候,通過子類實現!意思就是說我們依賴父類介面,在客戶端宣...