引言
本文参考以下这篇文章
[(2条消息) java设计模式3,里氏替换原则哪 吒的博客-CSDN博客java里氏替换原则](https://blog.csdn.net/guorui_java/article/details/125958335)
定义
子类可以扩展父类的功能,但不能改变父类原有的功能,也就是说,在子类继承父类时,除添加新的方法且完成新增功能外,尽量不要重写父类的方法。
代码
packagecom.guor.principle;
publicabstractclassHero {
// 编号
privateStringid;
// 姓名
privateStringname;
// 武力值
privateIntegerforceValue;
/**
* 名号
*/
publicvoidnickName(){
System.out.println("英雄名号");
}
/**
* 师傅
*/
publicvoidmaster(){
System.out.println("师傅");
}
/**
* 混元珠
*/
publicvoidMixedYuanzhu(){
System.out.println("混元珠");
}
}
//=============================哪吒=============================
publicclassNezhaextendsHero {
// balabala
}
//=============================敖丙=============================
publicclassAobingextendsHero {
// makabaka
}
个人总结
继承关系的使用是要建立在不破坏父类的基础之上的;
如果A extends B,但是A中的很多方法以及实现都和B不相同(如:给B中添加方法funcB,A本身并不需要),这时候使用继承就会强制将funcB和A绑定起来,增大了耦合度;
此时应该将一致性拆分出来,继承抽象类,从而在改动B时并不会给A带来影响。
里氏替换原则在一定程序上仍然是在继承和抽象之间的一种平衡和取舍。
2023.2.8 补充
面向对象的三大基本特征,五大基本原则 - 风之之 - 博客园 (cnblogs.com)
今天又刷到这篇文章,里面对里氏替换原则的定义是这样的:
在对象 x 为类型 T 时 q(x) 成立,那么当 S 是 T 的子类时,对象 y 为类型 S 时 q(y) 也应成立。(即对父类的调用同样适用于子类)