黎克特制替換:
子類能夠替換父類,出現在父類能夠出現的任何地方,子類必須完全實現父類的方法。在類中呼叫其他類時務必要使用父類,如果不能使用父類,則說明類的設計已經違背了原則。覆蓋或實現父類的方法時輸入引數可以被放大。即子類可以過載父類的方法,但輸入引數不比父類方法中的小,這樣在子類代替父類的時候,呼叫的仍然是父類的方法。
黎克特制替換原則是針對繼承而言的,如果繼承是為了實現**重用,也就是為了共享方法,那麼共享的方法應該保持不變,不被子類重新定義。如果繼承是為了多型那麼,而多型的前提是子類覆蓋父類的方法所以將父類定義為抽象類,抽象類不能夠例項化物件也就不存在替換這一說。
「子類可以擴充套件父類的功能,但不能改變父類原有的功能!!!!」
黎克特制替換原則中說,任何基類可以出現的地方,子類一定可以出現。 lsp是繼承復用的基石,只有當衍生類可以替換掉基類,軟體單位的功能不受到影響時,基類才能真正被復用,而衍生類也能夠在基類的基礎上增加新的行為
lsp所表述的就是在同乙個繼承體系中的物件應該有共同的行為特徵
類「鳥」中有個方法飛,企鵝自然也繼承了這個方法,可是企鵝不能飛阿,於是,我們在企鵝的類中覆蓋了飛方法,告訴方法的呼叫者:企鵝是不會飛的。這完全符合常理。但是,這違反了lsp,企鵝是鳥的子類,可是企鵝卻不能飛!需要注意的是,此處的「鳥」已經不再是生物學中的鳥了,它是軟體中的乙個類、乙個抽象
繼承機制的優點:
**共享,減少建立類的工作量
提高**的重用性;
子類可以形似父類,又異於父類;
提高父類的擴充套件性,實現父類的方法即可隨意而為;
繼承機制的缺點:
繼承是入侵性的(只要繼承,就必須擁有父類的所有屬性與方法);
降低了**的靈活性(子類擁有了父類的屬性方法,會增多約束);
增強了耦合性(當父類的常量、變數、方法被修改時,必需要考慮子類的修改)。
黎克特制替換原則
黎克特制替換原則 黎克特制代換原則 liskov substitution principle lsp 物件導向設計的基本原則之一。黎克特制代換原則中說,任何基類可以出現的地方,子類一定可以出現。lsp是繼承復用的基石,只有當衍生類可以替換掉基類,軟體單位的功能不受到影響時,基類才能真正被復用,而衍...
黎克特制替換原則
黎克特制替換原則更多的說的是子類與父類的關係的一種原則,子類必須實現父類的所有方法,所有能夠放子類的地方一定能夠放父類。但是這裡的話,我們講有的時候在我們的業務中,有的子類肯定是有個性化的特徵的,比如真槍和玩具槍,真槍能射出子彈,但是玩具槍就不能,那麼這個時候,我們或者通過抽象類,通過抽象類是我們可...
黎克特制替換原則
黎克特制替換原則,主要是乙個關於繼承的規範原則,它要求我們在軟體中寫繼承關係時,所有引用父類的地方必須能夠 透 明地使用其子類物件 子類可以實現父類所提供的抽象 方法,但不要去重寫父類已經實現的方法,或者過載父類的 構 造。要維護繼承的傳遞性,當然很多地方為這個原則打了個 比喻為 龍生龍,鳳生鳳,老...