一、什么是里氏代换原则:
- 一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且它察觉不出父类和子类对象的区别。也就是说,在软件里面,把父类替换成它的子类,程序的行为没有变化。
1、示例
(1)、定义一个人员类
package com.rf.rules.liskovSubstitution;
/**
* @description: 定义一个人员类
* @author: xiaozhi
* @create: 2020-05-05 11:58
*/
public class Person {
public void display(){
System.out.println("This is a person");
}
}
(2)、定义一个张三人员类,并继承Person类
package com.rf.rules.liskovSubstitution;
/**
* @description: 定义一个张三人员类,并继承Person类
* @author: xiaozhi
* @create: 2020-05-05 12:00
*/
public class ZhangSan extends Person{
@Override
public void display() {
System.out.println("This is zhangsan");
}
}
(3)、定义一个测试类
package com.rf.rules.liskovSubstitution;
/**
* @description: 定义一个测试类
* @author: xiaozhi
* @create: 2020-05-05 12:02
*/
public class Test {
public static void main(String[] args) {
//调用getDisplay方法,传入的是父类Person
Person person=new Person();
getDisplay(person);
//调用getDisplay方法,传入的是自子类zhangSan
Person zhangSan=new ZhangSan();
getDisplay(zhangSan);
}
public static void getDisplay(Person person){
person.display();
}
}
(4)输出结果如下: (5)、类图如下:
- 如果一个软件实体如果使用的是一个子类的话,那么它不能适用于其父类。
1、示例
(1)、定义一个人员类
package com.rf.rules.liskovSubstitution;
/**
* @description: 定义一个人员类
* @author: xiaozhi
* @create: 2020-05-05 11:58
*/
public class Person {
public void display(){
System.out.println("This is a person");
}
}
(2)、定义一个张三人员类,并继承Person类
package com.rf.rules.liskovSubstitution;
/**
* @description: 定义一个张三人员类,并继承Person类
* @author: xiaozhi
* @create: 2020-05-05 12:00
*/
public class ZhangSan extends Person{
@Override
public void display() {
System.out.println("This is zhangsan");
}
}
(3)、定义一个测试类