里氏置换原则(Liskov Substitution Principle),简称LSP
定义:
Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.
所有引用基类的地方必须能够透明的使用其子类对象。
也就是说,只要父类出现的地方子类就能够出现,而且替换为子类不会产生任何错误或异常。但是反过来,子类出现的地方,替换为父类就可能出现问题了。
这个原则是为良好的继承定义一个规范,简单的讲,有4层含义:
一、子类必须完全实现父类的方法
定义一个抽象类
public abstract class ViewPoint { //去丽江旅游public abstract void where();}下面两个类是实现这个抽象类
public class Lijiang extends ViewPoint {
@Override public void where() { System.out.println(“欢迎来到丽江……”);}
} public class Zhangjiajie extends ViewPoint {
@Override public void where() { System.out.println(“欢迎来到张家界……”);}
}人物是涂涂,在里面设置类类型来传递参数。此时涂涂要去的旅游景点还是抽象的
public class Tutu { //定义要旅游的景点private ViewPoint viewpoint;//涂涂要去的景点public void setViewPoint(ViewPoint viewpoint)
{ this.viewpoint = viewpoint;}
public void travelTo()
{ System.out.println(“涂涂要去旅游了”);viewpoint.where();}场景类。设置具体要去的景点
public class Sence { public static void main(String args[])
{ Tutu tutu = new Tutu();//设置要去的旅游景点tutu.setViewPoint(new Lijiang());tutu.travelTo();}运行结果: