面向对象编程的思想(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,只有在子类可以完全替代父类是,父类才是真正得到了复用。子类可以在父类的基础上添加新的行为。在面向对象的编程中,继承是抽象化的具体实现。

优点:里氏替换原则,舍得使用父类模块无需修改,通过使用不同的子类实现不同的扩展,是对实现抽象化的具体步骤的规范。

后记:面向对象编程中,同一个继承体系中的对象应该具有共同的行为特征,对代码的重用从抽象转焕成实现。


posted @   叕叒双又  阅读(114)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· 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工具
点击右上角即可分享
微信分享提示