里氏替換原則是指父類能出現的地方,其子類也可以出現,並且使用子類替換掉父類的話,程序不會報錯,反之,有子類的地方不一定能用父類替換。該原則要求我們儘可能的使用父類定義對象,具體運行的時候再決定子類對象類型。接下來,我們以人吃漢堡爲例,介紹里氏替換原則:
首先,定義一個父類Dishes
public class Dishes {
public String getName() {
return "菜品";
}
}
定義其子類Hamburg
public class Hamburger extends Dishes {
@Override
public String getName() {
return "漢堡";
}
}
定義一個Person類,並在eat方法裏聲明參數Dishes
public class Person {
public void eat(Dishes dishes) {
System.out.println("吃" + dishes.getName());
}
}
最後創建Test類
public class Test {
public static void main(String[] args) {
Person person = new Person();
person.eat(new Hamburger());
}
}
在Person的eat方法參數本該出現的Dishes類,我們在運行時候使用Hamburger子類代替,程序不會報錯,Dishes類能出現的地方,子類Hamburger就能出現。
利用里氏替換原則可以提高代碼的複用性,子類繼承父類時,可以繼承父類的屬性和方法,同時子類也可以擴展自己的方法。所以,我們在定義對象引用時,儘量以父類進行定義。