首页 > 其他分享 >封装、抽象、继承、多态

封装、抽象、继承、多态

时间:2023-07-09 21:35:56浏览次数:38  
标签:封装 调用者 继承 子类 多态 访问 抽象

封装

1、封装的定义

封装也叫作信息隐藏或者数据访问保护。类通过暴露有限的访问接口,授权外部仅能通过类提供的方式来访问内部信息或者数据。

在java中,private、public等关键字就是访问权限控制语法。private关键字修饰的属性只能类本身访问,可以保护其不被类之外的代码直接访问。如果java语言没有提供访问权限控制语法,所有的属性默认都是public的,那么任意外部代码都可以通过类似对象点的方式来直接访问、修改属性,也就没有办法达到隐藏信息和保护数据的目的了,也就无法支持封装特性了。

2、封装的意义

如果我们对类的属性访问不做限制,那么任何代码都可以直接访问、修改类中的属性,虽然这样看起来更加灵活,但从另一方面来说,过度灵活也意味着不可控,属性可以随意被以各种奇葩的方式修改,而且修改逻辑可能散落在代码中的各个角落,势必影响代码的可读性、可维护性。

除此之外,类仅仅通过有限的方法暴露必要的操作,也能提高类的易用性。如果我们把类属性都暴露给类的调用者,调用者想要正确地操作这些属性,就势必要对业务细节有足够的了解。而这对于调用者来说也是一种负担。相反,如果我们将属性封装起来,暴露少许的几个必要的方法给调用者,调用者就不需要了解太多背后的业务细节,用错的概率就减少很多。

抽象

1、抽象的定义

抽象讲的是如何隐藏方法具体实现,让调用者只需要关心方法提供了那些功能,并不需要知道这些功能是如何实现的。

在java中,我们使用接口类interface关键字语法或者抽象类abstract关键字语法来实现抽象这一特性。

2、抽象的意义

在面对复杂系统的时候,人脑能承受的信息复杂度是有限的,所以我们必须忽略掉一些非关键性的实现细节。而抽象作为一种只关注功能点不关注实现的设计思路,正好帮我们的大脑过滤掉许多非必要的信息。

继承

1、继承的定义

继承是用来表示类之间的is-a关系,比如猫是一种哺乳动物。从继承关系上来讲,继承可以分为两种,单继承和多继承。单继承表示一个子类只继承一个父类,多继承表示一个子类可以继承多个父类,比如猫既是哺乳动物,又是爬行动物。

为了实现继承这个特性,编程语言需要提供特殊的语法机制来支持,比如java使用extends关键字来实现继承,C#使用冒号。不过有些语言只支持单继承,比如java、PHP等。

2、继承的意义

继承最大的一个好处就是代码复用。不过过度使用继承,继承层次过深过复杂,就会导致代码可读性、可维护性变差。为了了解一个类的功能,可能需要按照继承关系一层层往上查看代码。

多态

1、多态的定义

多态是指,子类可以替换父类,在实际的代码运行过程中,调用子类的方法实现。

多态这种特性也需要编程语言提供特殊的语法机制来实现。

  • 编程语言要支持父类对象引用子类对象。
  • 编程语言要支持继承。
  • 编程语言要支持子类可以重写父类中的方法。

2、多态的意义

多态是很多设计模式、设计原则、编程技巧的代码实现基础,比如策略模式、基于接口而非实现编程、依赖倒置原则、里式替换原则、利用多态去掉冗长的if-else语句等。

标签:封装,调用者,继承,子类,多态,访问,抽象
From: https://www.cnblogs.com/sc-lixiaolong/p/17539358.html

相关文章

  • 重温设计模式 --- 抽象工厂模式
    引言抽象工厂模式一种创建型设计模式,它提供了一种方式来封装一组具有相同主题的工厂,而不必指定它们具体的类。这样,客户端代码就可以使用抽象工厂来创建一组相关的对象,而不必关心实际创建的具体类。抽象工厂模式有以下几个主要角色:抽象工厂(AbstractFactory):声明用于创建抽象产......
  • 小程序函数全集封装
    /***Createdbyzrs*/importVuefrom'vue'/***json拼接为字符串*@paramjson*@returns{string}*/exportfunctionqs(json){letstr=''for(letkeyinjson){if(json.hasOwnProperty(key)){str+=key+'......
  • 如何用C语言实现多态?
    多态(Polymorphism)是指面向对象程序运行时,相同的消息可能会送给多个不同的类之对象,系统依据对象所属类,引发对应类的方法,而有不同的行为。简单来说,所谓多态意指相同的消息给予不同的对象会引发不同的动作。在C语言中,可以通过结构体和指针来实现多态。以下是通过结构体和指针实现多态......
  • 关于接口和抽象类
    接口(Interface)和抽象类(AbstractClass)用于实现代码的抽象和封装。定义方式:接口是一种纯粹的抽象概念,只定义了方法的签名,没有实现;抽象类是一个可以包含抽象方法和具体方法的类。实现方式:一个类可以实现多个接口;一个类只能继承一个抽象类。方法:接口中的方法默认是公共的抽......
  • Java 抽象类的定义与使用
    抽象类抽象类举例: abstractPeople{publicabstractvoideat();publicabstractvoidsleep();}   抽象类的几个特点1.抽象类被修饰符abstract修饰 abstract类名{类体} 2.抽象类内可以存在抽象方法与非抽象方......
  • C++ 设计模式之抽象工厂模式
    设计模式之抽象工厂模式抽象工厂模式,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。其UML图如下: 结合上图我们来理解一下抽象工厂模式的定义。提供一个创建一些列相关或相互依赖对象的接口,而无需指定它们具体的类。在上图中一系列相互依赖或相关......
  • C++ 多态
     多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。C++多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。下面的实例中,基类Shape被派生为两个类https://www.121mu.com/czss/......
  • 微信模板消息推送封装方法
    /***@explain*发送消息通知*@returnarray|mixed*@remark*获取到用户的openid之后可以判断用户是否有数据,可以直接跳过获取access_token,也可以继续获取access_token*access_token每日获取次数是有限制的,access_token有时间限制,可以存储到数据库7200s.7200s后access......
  • ASEMI代理海矽美SFP6002, 快恢复二极管SFP6002封装
    编辑-ZSFP6002参数描述:型号:SFP6002封装:TO-247-AB最大反向重复峰值电压VRRM:200V平均整流正向电流IF:60A反向恢复时间TRR:≤30nS正向峰值浪涌电流IFSM:450×2A工作接点温度TJ:-40~150℃储存温度TSTG:-40~150℃典型热阻RθJC:0.5℃/WVB:200VIR:0.02mAVF:0.9V  SFP6002特征:超......
  • 第九篇 - SpringBoot统一结果封装Json数据
    前面几节学习了SpringBoot和Vue的结合,以及Vue跳转到另一个Vue页面。这节学习SpringBootcontroller返回Json数据格式封装。参考链接:https://zhuanlan.zhihu.com/p/347233348第一步:在entity文件夹下新建一个ResultVo类。 ResultVo.javapackagecom.example.demo.entity;p......