面向对象编程的思想(2)
名称:里氏替换原则(Liskov Substitution Principle)LSP
核心:在任何父类出现的地方都可用它的子类替代。换言之:子类型必须能够替换掉他们的父类型。
例子:例如我们设计一个OldCarpenter类:
public class OldCarpenter{
public void MakeFurniture(){
System.out.println("做出一把椅子!");
}
使用YoungCarpenter继承OldCarpenter类:
public class YoungCarpenter extends OldCarpenter{
//覆盖父类的方法
@Override
public void MakeFurniture(){
System.out.println("徒弟做出一把椅子!");
System.out.println("将椅子进行装饰!");
}
客户端测试代码:
public static void main(String[] args){
OldCarpenter carpenter = new OldCarpenter();
System.out.println("原来找老木匠做椅子");
carpenter.MakeFurniture();
System.out.println("后来老木匠让徒弟代做");
carpenter = new YoungCarpenter();
carpenter.MakeFurniture();
运行结果很明显:在这个过程中,小木匠替代了老木匠的座椅子,对顾客是没有影响的。
总结:上边的YoungCarpenter类的对象完全可以替代OldCarpenter,只有在子类可以完全替代父类是,父类才是真正得到了复用。子类可以在父类的基础上添加新的行为。在面向对象的编程中,继承是抽象化的具体实现。
优点:里氏替换原则,舍得使用父类模块无需修改,通过使用不同的子类实现不同的扩展,是对实现抽象化的具体步骤的规范。
后记:面向对象编程中,同一个继承体系中的对象应该具有共同的行为特征,对代码的重用从抽象转焕成实现。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具