1. 程式人生 > 實用技巧 >面向物件設計原則——里氏原則

面向物件設計原則——里氏原則

里氏替換原則

里氏替換原則(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原則