面向对象三大特征及其优劣接口的特点、抽象类的特点

简单介绍下面向对象三大特征?

封装:封装指的就是把对象的属性隐藏在内部,不允许外部对象直接访问内部信息,但是可以提供一些被外界访问的方法来访问属性。优点在于数据隐藏(通过定义私有属性,避免直接访问和修改对象的数据,提高数据的安全性和可靠性)、隔离复杂性(封装将类的实现细节隐藏起来,只暴露必要的接口给外部使用者,减少了对外部的依赖,降低了类与类的复杂性)、提供公共接口(通过封装、定义公共接口,对外提供统一的访问和操作方式,提供更好的交互方法、便于使用和维护);缺点在于使用不当可能会导致属性过度保护或者过度开放。
继承:继承指的就是一个类通过extends关键字来继承另一个类型,子类可以直接使用父类的非私有属性和方法,并且可以覆盖父类的方法,从而实现自己的行为。优点在于代码复用(子类可以直接使用父类的方法和属性,避免了重复编写相同的代码,提高了代码复用性),扩展性(子类可以在继承父类的继承上进行修改和扩展,添加新属性和方法,满足不同需求),(继承建立了对象之间的关系,通过继承可以形成类的体系结构,使得程序逻辑更加清晰和有组织性)。缺点在于如果结构过于复杂,层次过深,会增加类之间的关系和依赖,理解与维护代码会更加困难。有着较强的耦合关系,父类去修改的话会影响所有子类,单一继承限制(可以通过接口来解决)
多态:多态指的是一个对象有多个形态,具体的实例就是父类的引用指向子类的实例。优点在于代码的灵活性(我们可以通过统一的接口来操作不同的对象,从而提高代码的灵活性和可维护性,当需求更新时候我们只需要更换具体的子类对象,无须修改现有的代码)、实现接口的透明性(可以将对象的实际类型隐藏起来,只关注接口定义的方法。)、实现方法的回调(通过多态,可以将一个对象作为参数传递给其他方法,从而实现方法的回调,这在事件处理、回调函数的场景中非常实用,可以让程序在运行时候决定具体调用哪个方法)、提高了代码的可读性和可维护性。缺点是简单功能的过度抽象化(使用多态会导致有些功能被过度抽象,无法直接调用子类特定方法,限制了某些具体功能的使用。)、运行时开销(在运行时候要通过动态绑定和虚函数表等机制确定方法调用,额外的运行时开销会对性能产生影响)、引入复杂性。

接口

  1. 有Interface定义
  2. 可以包含常量方法、抽象方法、静态方法(1.8后)、默认方法(1.8后)、私有方法(1.9后)
  3. 实现类通过implements来实现
  4. 可以多实现
  5. 接口中的成员访问权限只能是public(默认是public权限),接口中的成员变量必须是public static final修饰必须有初始值

抽象类

  1. 由abstract来修饰
  2. 可以包含变量、常量、构造方法、普通方法、静态方法、抽象方法(不需要有方法体)
  3. 子类通过extends来继承
  4. 只能单一继承
  5. 抽象类中的成员,任何访问权限都可以(默认为默认权限(同包中))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/874302.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript银行卡实名核验接口集成 代码详解

银行卡实名核验接口是一种用于验证银行卡持有人身份的服务,通常应用于金融机构或第三方支付平台。这种接口允许应用程序或服务发送请求,以验证银行卡所有者的身份信息是否与银行记录相匹配。 应对市场发展需求,翔云提供了银行卡实名认证接口…

压缩pdf大小的方法 指定大小软件且清晰

在数字化时代,pdf文件因其良好的兼容性和稳定性,已成为文档分享的主流格式。然而,高版本的pdf文件往往体积较大,传输和存储都相对困难。本文将为您详细介绍几种简单有效的方法,帮助您减小pdf文件的大小,让您…

Gradle构建配置包:一键生成构建脚本的秘籍

标题:Gradle构建配置包:一键生成构建脚本的秘籍 在软件开发过程中,构建系统是项目自动化构建的核心。Gradle,作为一种流行的构建自动化工具,以其灵活性和强大的扩展性而广受开发者欢迎。Gradle构建配置包(…

任务3 git基础知识(主要是pr的笔记)

任务要求 https://github.com/InternLM/Tutorial/blob/camp3/docs/L0/Git/task.md 文档 https://github.com/InternLM/Tutorial/blob/camp3/docs/L0/Git/readme.md 任务 任务1:提交PR https://github.com/InternLM/Tutorial/pull/1242 任务2:实践…

UML的六大关系---泛化、实现、关联、聚合、组合、依赖

文章目录 前言1. 泛化关系(Generalization)2. 实现关系(Realization)3. ‌关联关系(Association)4. 聚合关系(Aggregation)5. 组合关系(Composition)6. 依赖关系(Dependency)总结 前言 讲到设计模式,就会有 U M L UML UML类图这个东西。 一开始就很难理解各种线啥意…

Android RSA 加解密

文章目录 一、RSA简介二、RSA 原理介绍三、RSA 秘钥对生成1. 密钥对生成2. 获取公钥3. 获取私钥 四、PublicKey 和PrivateKey 的保存1. 获取公钥十六进制字符串1. 获取私钥十六进制字符串 五、PublicKey 和 PrivateKey 加载1. 加载公钥2. 加载私钥 六、 RSA加解密1. RSA 支持三…

selenium.common.exceptions.NoAlertPresentException: Message:

这个错误 selenium.common.exceptions.NoAlertPresentException 表示在尝试访问警告框时,当前页面上并没有活动的警告框。这通常发生在两种情况下: 警告框实际上并没有出现,或者在你尝试访问它之前已经被自动处理或关闭了。你的代码在警告框…

CTF-Web习题:2019强网杯 UPLOAD

题目链接:2019强网杯 UPLOAD 解题思路 打开靶场如下图所示,是一个注册和登录界面 那就注册登录一下,发现是一个提交头像的页面: 试了一下只有能正确显示的png图片才能提交成功,同时F12拿到cookie,base6…

树形背包问题

一些题目给定了树形结构,在这个树形结构中选取一定数量的点或边(也可能是其他属性),使得某种与点权或者边权相关的花费最大或者最小。解决这类问题,一般要考虑使用树上背包。 树上背包,顾名思义&#xff0c…

Linux 基础开发工具 : Vim编辑器

Vim 是 Linux 和其他类 Unix 系统上广泛使用的文本编辑器之一。它基于更早的 vi 编辑器,但添加了许多增强功能和扩展。Vim 是“Vi IMproved”的缩写,意为“改进的 Vi”,我们常使用Vim编辑器编写c/c代码。 ps:该篇介绍均为最基础介…

驱动开发系列07 - 驱动程序如何分配内存

一:概述 Linux 内核提供了丰富的内存分配函数、在本文中,我们将介绍在设备驱动程序中分配和使用内存的方法,以及如何优化系统的内存资源。由于内核为驱动程序提供了统一的内存管理接口。所以我们不会去讨论不同架构是如何管理内存的,文本不涉及分段、分页等问题,此外在本文…

Blender中保存透明图片

在Blender中保存透明图片,主要是通过在渲染设置中调整背景透明度,并选择合适的文件格式来保存图像。以下是一个详细的步骤指南: 一、设置渲染属性 打开Blender并加载你想要渲染的模型。在右侧的属性编辑器中,找到并点击“渲染属…

解决Visual studio内报错信息:MSB8036:找不到 Windows SDK 版本问题

问题描述: 找不到WindowsSDK版本,请安装所需版本的Windows SDK,或者在项目属性页中通过右键单击解决方案并选择“重定解决方案目标”来更改SDK版本。 首先,如果你尝试了以下两种方法: (1)重新…

【Qt】 FFmpeg+Qt windows 32位或者64位环境搭建

简介 目前Ffmpeg官网(64位连接)下载的均为64位编译的,这要求我们采用的Qt creator也采用64位编译器。但是仍存在部分用户采用32位编译器,所以这部分用户需下载32 Ffmpeg(32位连接)。 根据使用的编译器位数…

Linux下安装Redis(超简单)

1.下载 选着自己需要下载的版本后,右击选择复制链接,然后利用命令进行下载,进入Xshell控制台,输入wget将复制的链接粘帖上,这里我选择的是6.0.6版本。 命令如下: wget https://download.redis.io…

7款主流大模型实测:简单的数感测试全翻车

实测strawberry中有2个字母“r”?不会比大小的大模型也几乎数不对数,数理能力差到惊人! 科技新知 原创 谁能想到,号称“超级大脑”的大模型,竟然在几道简单的数学题上败给了小学生。 近日,国内火热的音乐…

Vue.js 2 项目实战(三):综合案例-小黑记事本

前言 Vue.js 是一个用于构建用户界面的渐进式 JavaScript 框架。它的设计目标是通过采用易于上手的结构和强大的功能,使前端开发变得更加简便和高效。以下是 Vue.js 的一些关键特性和优点: 核心特性 声明式渲染 Vue.js 使用声明式语法来描述用户界面&a…

网络及操作系统知识点汇总

一.网络相关 1.网络模型 (1)七层网络模型 从下到上:物理层-数据链路层-网络层-传输层-会话层-表示层-应用层 (2)TCP/IP网络模型 简化的七层模型:数据链路层-网络层-传输层-应用层 应用层,负…

HR怎么看待PMP证书呢?

不是HR,但 HR 的招人标准也是根据市场跟岗位需求来的吧。据我了解,PMP 证书目前还是有市场的,大家可以根据自己的行业跟公司,去判断下 PMP 的含金量,看自己是否需要去考。一定要结合自己的需求分析,盲目跟风…

【QT】定时器事件 - QTimerEvent QTimer

qt 系统 - 定时器 定时器1. QTimerEvent2. QTimer3. 获取系统日期及时间 定时器 Qt 中在进行窗口程序的处理过程中,经常要周期性的执⾏某些操作,或者制作⼀些动画效果,使用定时器就可以实现。所谓定时器就是在间隔⼀定时间后,去执…