java设计模式之设计原则⑥里氏代换原则

定义:
(1)一个软件实体如果使用的是一个父类的话,那
么一定适用于其子类,而且它察觉不出父类和子
类对象的区别。也就是说,在软件里面,把父类
替换成它的子类,程序的行为没有变化。
(2)一个软件实体如果使用的是一个子类的话,那
么它不能适用于其父类。

里氏代换原则就是使用父类的地方就可以传递子类。

以下通过案例进行理解里氏代换原则:
首先创建一个父类Person,写一个display方法
java设计模式之设计原则⑥里氏代换原则_第1张图片
创建一个子类Man继承了Person这个类,重写其display方法
java设计模式之设计原则⑥里氏代换原则_第2张图片
创建一个MainClass测试类,里面写一个main启动方法,写一个display方法,参数是Person这个对象,方法中调用person的display方法。
java设计模式之设计原则⑥里氏代换原则_第3张图片
运行结果如下

对于里氏代换原则的定义来说就是我们测试类MainClass中调用display方法可以将父类换成子类如下:
java设计模式之设计原则⑥里氏代换原则_第4张图片
这其实就是多态,就是方法参数是父类,我们用多态的形式传递其子类对象进去,也是成立的。
但是反过来如果方法的参数是子类对象,我们就不可以传递父类对象。

案例二:
java设计模式之设计原则⑥里氏代换原则_第5张图片
创建一个Bird鸟 接口,有个方法fly飞
在这里插入图片描述
创建一个类 老鹰 实现了Brid接口。
java设计模式之设计原则⑥里氏代换原则_第6张图片
创建一个麻雀类 实现了Brid接口

java设计模式之设计原则⑥里氏代换原则_第7张图片
但是这个时候如果是企鹅的话,它实现了鸟类这个接口,但它不会飞
java设计模式之设计原则⑥里氏代换原则_第8张图片
创建一个MainClass测试类,main方法和fly方法
java设计模式之设计原则⑥里氏代换原则_第9张图片
测试发现企鹅就不会飞,所以企鹅不能实现鸟类的接口。

你可能感兴趣的:(java设计模式)