专业IT网络知识平台,分享IT百科知识、生活百科知识解答!

易企推科技
易企推科技

面向对象设计原则有哪些(常用六大面向对象设计原则介绍)

来源:小易整编  作者:小易  发布时间:2023-02-16 06:31
摘要:面向对象设计原则有哪些(常用的六大面向对象设计原则介绍)面向对象设计原则:,单一职责原则、开放关闭原则、里式替换原则、依赖倒置原则、接口隔离原则、迪米特法则、组合复用原则;...

换句话来说,只要是猴类适用的,猕猴和石猴都适用,这其实就是里式替换原则。

这是第一种解释,还有第二个更加通俗易懂的解释: 所有引用基类的地方必须能透明地使用其子类的对象。

第二种定义比较通俗,容易理解:只要有父类出现的地方,都可以用子类来替代,而且不会出现任何错误和异常。但是反过来则不行,有子类出现的地方,不能用其父类替代。

实例代码 :

public class TestA {

public void fun(int a,int b){

System.out.println(a+"+"+b+"="+(a+b));

}

public static void main(String[] args) {

System.out.println("父类的运行结果");

TestA a=new TestA();

a.fun(1,2);

//父类存在的地方,可以用子类替代

//子类B替代父类A

System.out.println("子类替代父类后的运行结果");

TestB b=new TestB();

b.fun(1,2);

}

}

class TestB extends TestA{

@Override

public void fun(int a, int b) {

System.out.println(a+"-"+b+"="+(a-b));

}

}

大家肯定也都能猜出来结果是什么样子的

父类的运行结果

1+2=3

子类替代父类后的运行结果

1-2=-1

Process finished with exit code 0

我们想要的结果是“1+2=3”。可以看到,方法重写后结果就不是了我们想要的结果了,也就是这个程序中子类B不能替代父类A。这违反了里氏替换原则原则,从而给程序造成了错误。

子类中可以增加自己特有的方法

这个很容易理解,子类继承了父类,拥有了父类和方法,同时还可以定义自己有,而父类没有的方法。这是在继承父类方法的基础上进行功能的扩展,符合里氏替换原则。

public class TestA {

public void fun(int a,int b){

System.out.println(a+"+"+b+"="+(a+b));

}

public static void main(String[] args) {

System.out.println("父类的运行结果");

TestA a=new TestA();

a.fun(1,2);

//父类存在的地方,可以用子类替代

//子类B替代父类A

System.out.println("子类替代父类后的运行结果");

TestB b=new TestB();

b.fun(1,2);

b.newFun();

}

}

class TestB extends TestA{

public void newFun(){

System.out.println("这是子类的新方法...");

}

}

这次运行出来的代码结果就是我们意料中的内容了

父类的运行结果

1+2=3

子类替代父类后的运行结果

1+2=3

这是子类的新方法...

Process finished with exit code 0

AVA语言对里式替换原则支持的局限 :

JAVA编译器的检查是有局限性的,为什么呢?举个例子来说,描述一个物体大小的量有精度和准确度两种属性。所谓的精度,就是这个量的有效数字有多少位;而所谓的精准度,是这个量与真实的物体大小相符合到什么程度。

一个量可以有很高的精度,但是却无法与真实物体的情况相吻合,JAVA语言编译器能够检查的,仅仅是相当于精度的属性而已,它没有办法去检查这个量与真实物体的差距。

换一句话来说,JAVA编译器不能检查一个系统在实现和商业逻辑上是否满足里式替换原则。

而里式替换原则在设计模式中也有体现,请关注我们的知识星球,链接在文末,我们将每周更新一篇关于设计模式的文章。


本文地址:网络知识频道 https://www.hkm168.com/jiqiao/903083_2.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!


网络知识
小编:小易整编
相关文章相关阅读
  • 什么是结构化程序设计

    什么是结构化程序设计

    结构化程序设计是一种使程序更加清晰、易于理解和维护的编程方法论。通过将程序划分为不同的模块,并使用控制结构来组织这些模块,结构化程序设计使程序的开发和维护更加高效和可靠,无论是初学者还是有经验的开发者,都应该掌握结构化程序设计的基本原理和技...

  • javascript中的设计模式有哪些

    javascript中的设计模式有哪些

    javascript中的设计模式有:单例模式、策略模式、代理模式、迭代器模式、“发布-订阅”模式、命令模式、组合模式、模板方法模式、享元模式、职责链模式、中介者模式、装饰者模式、状态模式、适配器模式、外观模式等。本教程操作环境:window...

  • 在线投票系统的设计与实现

    在线投票系统的设计与实现

    在线投票系统的设计与实现随着互联网的不断发展,在线投票系统成为了一种非常方便和高效的方式来进行民意调查和选举。本文将介绍在线投票系统的设计和实现,并附带一些代码示例。一、系统设计功能需求分析在线投票系统主要具备以下功能:用户注册与登录:用户...

  • UI设计主要学什么?

    UI设计主要学什么?

    ui设计是指对软件的人机交互、操作逻辑、界面美观的整体设计;ui设计中文名字叫:用户界面设计。ui设计作为时下热门高薪职业之一,其发展前景不言而喻,应用领域非常广泛,那么ui设计都需要学习什么呢?下面本篇文章就来给大家介绍一下,希望对你们有...

  • Mysql索引的最左前缀原则是什么

    Mysql索引的最左前缀原则是什么

    前言之所以有这个最左前缀索引归根结底是mysql的数据库结构B+树在实际问题中比如索引index(a,b,c)有三个字段,使用查询语句select*fromtablewherec='1',sql语句不会走index索引...

  • ux设计是什么

    ux设计是什么

    ux,指的是用户体验。一般而言国内ux设计师也称为交互设计师或ue设计师。ux设计师是设计人与信息产品的流程和关系,归根结底都要研究人、事、物的联系,它是一个囊括计算机工程、心理学、设计的交叉学科。本教程操作环境:windows7系统、De...

  • Java 中的架构模式和领域驱动设计技术

    Java 中的架构模式和领域驱动设计技术

    java是当前使用最广泛的编程语言之一,它不仅具有面向对象的特性,同时也提供了许多强大的架构模式和设计技术,其中领域驱动设计(domain-drivendesign,ddd)是一个非常流行的技术,并且在实际开发中有广泛的应用。本文将...

  • CSS网页背景图设计:创建各种背景图样式和效果

    CSS网页背景图设计:创建各种背景图样式和效果

    CSS网页背景图设计:创建各种背景图样式和效果,需要具体代码示例摘要:在网页设计中,背景图是一种重要的视觉元素,它可以有效地增强页面的吸引力和可读性。本文将介绍一些常见的CSS背景图设计样式和效果,并提供相应的代码示例。读者可以根据自己的需...

  • 周排行
  • 月排行
  • 年排行

精彩推荐