裡式替換原則(LSP)
講繼承
所有引用父類的地方都必須可以透明的使用其子類物件
幾個原則:
1、子類必須完全實現父類的方法
2、子類可以有自己的個性
3、覆蓋或實現父類的方法時輸入引數可以被放大
4、覆寫或實現父類的方法時輸出結果可以縮小
public class C {
public int func(int a, int b){
return a+b;
}
}
public class C1 extends C{
@Override
public int func(int a, int b) {
return a-b;
}
}
public class Client{
public static void main(String[] args) {
C c = new C1();
System.out.println("2+1=" + c.func(2, 1));
}
執行結果:2+1=1##
上面的執行結果明顯是錯誤的。類C1繼承C,後來需要增加新功能,類C1並沒有新寫一個方法,而是直接重寫了父類C的func方法,違背里氏替換原則,引用父類的地方並不能透明的使用子類的物件,導致執行結果出錯。
覆蓋或實現父類的方法時輸入引數可以被放大
import java.util.HashMap;
public class Father {
public void func(HashMap m){
System.out.println("執行父類...");
}
}
//map 比hashmap更寬鬆
import java.util.Map;
public class Son extends Father{
public void func(Map m){//方法的形參比父類的更寬鬆
System.out.println("執行子類...");
}
}
import java.util.HashMap;
public class Client{
public static void main(String[] args) {
Father f = new Son();//引用基類的地方能透明地使用其子類的物件。
HashMap h = new HashMap();
f.func(h);
}
}
執行結果:執行父類
相關文章
- 設計原則之【裡式替換原則】
- 設計模式六大原則(二)----裡式替換原則設計模式
- 三 :LSP(里氏代換原則)
- 里氏替換原則
- 設計模式六大原則(2):里氏替換原則設計模式
- Laravel深入學習10 – 里氏替換原則Laravel
- 設計模式的七大原則(4) --里氏替換原則設計模式
- 軟體開發六大原則(三)-里氏替換原則
- 物件導向設計的六大原則(SOLID原則)-——里氏替換原則物件Solid
- DesignPattern系列__04里氏替換原則
- 面象物件設計6大原則之三:里氏替換原則物件
- S.O.I.L.D 之里氏替換原則
- 嘻哈說:設計模式之里氏替換原則設計模式
- [OOD]違反里氏替換原則的解決方案
- 請banq大哥SRP,OCP,LSP,DIP,ISP,LOD原則
- C#中易混淆概念:解析里氏替換原則,虛方法C#
- mysql的正則替換方式MySql
- js替換字串裡的空格JS字串
- 正則替換 修改字元 去除空格字元
- 利用正則批次替換指定字元字元
- shell替換程式裡的程式碼
- 【原創】簡單替換加密加密
- JS中使用正規表示式替換物件裡的大小寫JS物件
- PostgreSQL 查詢替換函式SQL函式
- java正規表示式替換Java
- vi 正規表示式替換
- sql 正則替換資料庫語句!SQL資料庫
- linux替換jar裡面的class檔案LinuxJAR
- 物件導向設計原則之里氏代換原則物件
- php字串與字元替換函式PHP字串字元函式
- Java 正規表示式替換斜槓Java
- 正規表示式的字串替換方法字串
- SQL中的替換函式replace()使用SQL函式
- php中幾個字串替換函式PHP字串函式
- HTML 替換元素與非替換元素HTML
- 程式世界裡的不信任原則
- js使用replace()函式替換所有指定字元JS函式字元
- python使用正規表示式文字替換Python