当前位置: 首页 > news >正文

封装、继承、多态的理解

目录

1、封装

2、继承

3、多态

4、举例:计算机和外设


1、封装

封装是从使用者的角度,将某种复杂的事务,打包成一个整体,只对使用者提供方便使用的方式。

举例:

1> 胶囊:对于各种混合药物的封装

2> 可乐杯:饮料是被装在杯子里面的,杯子的最上面封上盖子,只留有一个孔用于插吸管,这其实就是封装

3> 计算机对于主机机箱对于主板、CPU及内存等配件的封装

分析一下对计算机主机的封装,它必然需要一个机箱把各种配件封装进去,如主板、CPU、内存、显卡、硬盘等。一方面,机箱起到保护作用,防止异物(如老鼠、昆虫等)进入内部而破坏电路;另一方面,机箱也不是完全封闭的,它一定对外预留有一些访问接口,如开机按钮、USB接口等,这样用户才能够使用计算机

封装的优点:主要是方便、快捷。零散的数据缺乏管理,难以直接使用,封装好后,使用者就不需要关心被子的内部对象和工作机制了。封装内的事物,以关键字private声明,可以防止外部随意访问,避免数据污染

注意:千万不要过度设计、过度封装,更不要东拉西扯、乱攀亲戚,比如把台灯、轮子、茶杯等物品封装在一起,或者在计算机主机里封装一个算盘。如果把一些不相干的对象硬生生封装在一起,就会使代码变得莫名其妙,难于维护与管理,所谓“物极必反,过犹不及”​,所以封装一定要适度。

2、继承

继承使父类的属性和方法延续到子类中,避免子类重复编码。子类可以通过重写来修改继承而来的方法实现,或者通过追加达到属性与功能扩展的目的。

举例:

1> toString()方法:所有的类都继承Object,所以可以用Object中的toString()方法

2> 犬类和不同犬种的继承

不管是什么犬类品种,它们都有某些共同的特征与行为,如吠叫行为等,所以我们需要把犬类共有的基因抽离出来,并封装到一个犬类祖先中以供后代继承。子类直接继承(extends)父类被声明为“public”的方法,可以通过重写来修改继承的方法,或者通过关键字“super”调用父类的方法并追加达到功能扩展的效果。

继承的优点:减少重复代码,方便扩展

3、多态

多态是指利用继承(extends)或接口(implements)实现,使同一方法或接口在不同对象中具有不同的实现方式。比如犬类接口,在不同的犬种对象上,同一个方法(比如颜色),会有不同的表现方式。具体表现方式是父类引用指向子类对象(Dog dog = new Husky())。

举例:

1> 人可以食用食物,而人所能接受的食物对象有很多种。

多态的优点:减少重复代码,方便扩展、降低耦合度

4、举例:计算机和外设

越是老式的计算机,其集成度越高,甚至把所有配件都一体化,配件之间的耦合度极高,难以拆分,难以维护。为了解决这个问题,设计人员提出了模块化的概念。于是各种外设(人员提出了模块化的概念)都涌现出来,如果每种设备都有一种接口,将会出现接口泛滥,所以采用了使用标准化接口(USB接口)。USB提供了一种接口标准:电压5V,双工数据传输,最重要的是其物理形态上的统一规范,只要是USB标准,设备就可以进行接驳。

计算机、USB接口、几个外设的故事:

  • 计算机:​“我宣布,从现在开始USB接口晋升为我的秘书,我只接收它传递过来的数据,谁要找我沟通必须通过它。
  • ​”USB接口:​“我不关心要接驳我的设备是什么,但我规定你必须实现我定义的getData()这个方法,但具体怎样实现我不管,总之我会调用你的这个方法把数据读取过来。
  • ​”USB键盘:​“我有readData(data Data)这个方法,我已经实现好了,传过去的是用户输入的字符。
  • ​”USB鼠标:​“我也一样,但传过去的是鼠标移动或点击数据。
  • ​”USB摄像头:​“没错,我也实现了这个方法,只是我的数据是视频流相关的。
  • ​”USB接口:​“不管你们是什么类型的数据,只要传过来转换成Data就行了,我接收你们的接驳请求,除了PS2鼠标。
  • ​”PS2鼠标:​“@计算机,老大,这怎么办?你找来的这个USB接口太霸道了,我们根本无法沟通,你们不能尊重一下老人吗?​
  • ”计算机:​“你自己想办法,要顺应时代潮流,与时俱进。​”PS2鼠标:……

计算机中装了一个USB接口,这就是“封装”​,而键盘、鼠标及摄像头都是USB接口的实现类,从广义上理解这就是一种“继承”​,所以计算机的USB接口就能接驳各种各样的USB设备,这就是“多态”​

扩展:有一种设备叫”转换器“,它能轻松地将老旧的接口设备调制适配到新的接口,以达到兼容的目的,这就是“适配器模式”​。

                                                                                                        ----- 内容参照《秒懂设计模式》

相关文章:

  • 基于区块链技术的供应链溯源系统:重塑信任与透明度
  • 改进模糊C均值时序聚类+编码器状态识别!IPOA-FCM-Transformer组合模型
  • ESMFold在线预测蛋白质结构
  • ShenNiusModularity项目源码学习(26:ShenNius.Admin.Mvc项目分析-11)
  • 设备预测性维护的停机时间革命:中讯烛龙如何用AI重构工业设备管理范式
  • Linux518 YUM源仓库回顾(需查)ssh 服务配置回顾 特定任务配置回顾
  • 【驱动开发】一 字符设备驱动框架
  • tensorflow图像分类预测
  • IDEA - Windows IDEA 代码块展开与折叠(基础折叠操作、高级折叠操作)
  • 渗透测试流程-中篇
  • 5、事务和limit补充
  • Linux的内存泄漏问题及排查方法
  • 【通用智能体】Playwright:跨浏览器自动化工具
  • C++学习:六个月从基础到就业——C++20:协程(Coroutines)
  • 【Linux】ELF与动静态库的“暗黑兵法”:程序是如何跑起来的?
  • IDE/IoT/搭建物联网(LiteOS)集成开发环境,基于 LiteOS Studio + GCC + JLink
  • Ansible模块——文件内容修改
  • 【Linux】简易版Shell实现(附源码)
  • Day29 类的装饰器
  • PopSQL:一个支持团队协作的SQL开发工具
  • 十大券商看后市|A股指数有望进一步缓步推高,淡化短期波动
  • 江南考古文脉探寻
  • 流失79载,国宝文物“子弹库帛书”(二、三卷)回归祖国
  • 俄乌直接谈判结束
  • 高途一季度净利润同比增长1108%: “与吴彦祖一起学英语”短时间内就实现了盈利
  • 龚正会见哥伦比亚总统佩特罗