面向物件設計原則——里氏原則
阿新 • • 發佈:2020-09-13
里氏替換原則
里氏替換原則(Liskov Substitution Principle,LSP)
繼承必須確保超類所擁有的性質在子類中仍然成立
(Inheritance should ensure that any property proved about supertype objects also holds for subtype objects)。
就是什麼時候應該使用繼承,什麼時候不應該使用繼承
簡單的要求:子類可以擴充套件父類的功能,但不能改變父類原有的功能。也就是說:子類繼承父類時,除新增新的方法完成新增功能外,儘量不要重寫父類的方法。
子類可以實現父類的抽象方法,但不能覆蓋父類的非抽象方法 子類中可以增加自己特有的方法 當子類的方法過載父類的方法時,方法的前置條件(即方法的輸入引數)要比父類的方法更寬鬆 當子類的方法實現父類的方法時(重寫/過載或實現抽象方法),方法的後置條件(即方法的的輸出/返回值)
要比父類的方法更嚴格或相等
注意:
雖然重寫父類方法簡單,但是繼承體系的可複用性會比較差
作用是什麼
實現開閉原則的重要方式之一
克服繼承重寫父類造成的可複用性茶
例子:
/** * 基類-實現兩個數相減 */ public class Subtract { public int sub(int a,int b){ return a -b; } }
/** * 增加一個新的功能:完成兩數相加,然後再與100求和, * 由類B來負責。即類B需要完成兩個功能: * 兩數相減 * 兩數相加,然後再加100*/ public class SubtractAndAdd extends Subtract{ @Override public int sub(int a, int b) { return a+b;//這裡如果修改了父類的相減的方法,造成功能錯誤 } public int add(int a,int b){ return sub(a,b)+100; } }
上面就違背了LSP原則