封装、继承、抽象、多态分别可以解决那些问题?

封装、继承、抽象、多态分别可以解决那些问题?

面向对象的四大特性,对于他们的定义很熟悉,但是他们解决了哪些问题?

封装

封装---信息隐藏,数据保护

外部仅能通过类提供的方式,访问内部的信息或者数据,对于java来说,是属性字段私有化,访问函数公有,甚至部分属性字段没有的一种结构形式。

解决的问题

  • 可控:信息或数据只能通过部分暴露的方法访问,限制了灵活性,但是修改的逻辑、业务的实现,都处于可控状态下,可维护性
  • 隐藏:使用者不需要具体的实现方式,实现的细节,简化了操作,降低了犯错的概率,可易用性

抽象

封装是对信息和数据的隐藏,而抽象就是对实现方法的隐藏,践行的是基于接口为非实现、开闭原则、代码解耦的思想。对于java来说是接口类、抽象类,还可以包括函数,因为函数本身就是对实现方法的封装,使用者只需要了解能够做什么,对于实现的细节不需要具体的掌握。

因为抽象的思想不止在面向对象编程中存在,可以说是一个普遍的方法,所以有时候也不把它看作是一个面向对象的特性

意义

  • 简化:只需要关注功能而不需要了解细节,是对易理解、易拓展的践行

继承

简单的说---is a

好处就是代码复用、符合直觉关系,在java中是extends的单继承。坏处是继承层次太深、太复杂时,可读性(需要查看父类方法)、可维护性(父类修改子类也产生修改)差。

多用聚合少用继承?

多态

父类引用指向子类实现---子类可以替换父类

实现方式:

  • 继承和重写---有继承关系
  • 接口的实现---实现了接口
  • duck-typing---只需要具有相同的方法,python等动态语言的特性

解决的问题:

  • 可拓展、可复用性:只需要一个使用逻辑,就能实现种方式的操作

封装、继承、抽象、多态分别可以解决那些问题?

上一篇:vue3.0入门(五):vite构建vue项目


下一篇:This job is stuck, because the project doesn‘t have any runners online assigned to it. Go to Runners