简介面向对象的封装、继承、多态和抽象
面向对象(Object-Oriented)的特点通常归纳为四个核心概念:封装、继承、多态和抽象。
1. 封装(Encapsulation)
定义: 封装是将对象的属性(数据)和方法(操作)打包在一起,隐藏对象的内部实现细节,只暴露出必要的接口给外部使用。
通俗解释: 封装就像是一个“黑箱子”,外部只需要知道如何使用这个“箱子”而不需要知道它是如何工作的。例如,驾驶汽车时,你只需要使用方向盘、油门和刹车(外部接口),而不必了解引擎内部的复杂工作原理。
好处:
- 提高代码的安全性,防止外部直接访问或修改对象内部数据。
- 使代码更易维护,修改内部实现不会影响到外部使用。
2. 继承(Inheritance)
定义: 继承是指一个类(子类)从另一个类(父类)继承属性和方法,子类可以直接使用父类的功能,也可以对其进行扩展或修改。
通俗解释: 继承就像家族遗传,子类继承了父类的“基因”(属性和方法),可以直接使用这些特性,还可以根据需要添加新的特性或改进父类的特性。例如,鸟
类是一个父类,企鹅
类是子类,企鹅继承了鸟的特性(如有翅膀),但可以有自己的特性(如不会飞)。
好处:
- 提高代码的复用性,避免重复代码。
- 使代码结构更加清晰,通过继承关系理顺类与类之间的联系。
3. 多态(Polymorphism)
定义: 多态是指同一操作在不同对象上可以有不同的表现形式。它允许使用父类的引用指向子类的对象,并调用子类中的方法。
通俗解释: 多态就像是音乐会上的指挥棒,同样的指挥动作(操作),不同的乐器(对象)会发出不同的声音。例如,你有一个动物
类,有一个叫声()
方法,不同的动物(如狗
和猫
)调用叫声()
方法时会发出不同的声音(“汪汪”或“喵喵”)。
好处:
- 提高代码的灵活性,允许同一接口在不同实现中表现出不同的行为。
- 使得代码扩展更加容易,添加新类型时无需修改现有代码。
4. 抽象(Abstraction)
定义: 抽象是指对现实世界的复杂事物进行建模,提取出共性特征,忽略不重要的细节,从而形成一个抽象的类或接口。
通俗解释: 抽象就像设计蓝图,专注于事物的主要特性而忽略细节。例如,“车辆”可以是一个抽象的概念,它包含了所有车辆的共同特征(如有轮子、能行驶),而具体的车(如汽车、摩托车)则是这个抽象概念的具体实现。
好处:
- 提高代码的可理解性,简化对复杂系统的建模。
- 使得代码更易扩展,通过接口或抽象类可以定义通用的行为,而具体实现可以在不同的类中完成。
总结
- 封装:保护数据,通过公开接口与外界互动。
- 继承:复用代码,新类从现有类继承特性。
- 多态:同一操作在不同对象上有不同表现。
- 抽象:提取共性特征,忽略复杂细节。
===============================写在最后================================
大家可能会疑惑抽象为什么属于面向对象的四大核心特性,以往我们都说是3个。其实抽象并不是一个新增加的要素,而是面向对象编程(OOP)的四大核心特性之一,和封装、继承、多态一样重要。抽象这个概念在面向对象的思想中一直存在,它主要用于帮助开发者处理复杂系统的建模问题。
为什么有时不提到抽象?
在一些介绍面向对象编程的场合,可能会强调封装、继承和多态这三个概念,而没有单独提到抽象。原因可能包括以下几点:
-
概念的重叠性:在某些情况下,抽象可能被认为是其他概念的基础,比如封装和继承都依赖于抽象。因此,有时会默认抽象作为前提,而不单独列出。
-
不同的教学方式:一些教材或课程可能为了简化教学内容,选择先讲解封装、继承和多态,再通过这些特性引出抽象的概念。
-
重点不同:有些编程语言或编程环境中,抽象的表现形式可能不如其他特性那样明显,所以在实际应用中不一定会被单独提到。
抽象的重要性
抽象是面向对象编程中非常重要的特性,因为它帮助我们:
- 简化问题:通过抽象,复杂的现实问题可以被简化成几个主要的概念。
- 提高可维护性:通过定义抽象类或接口,代码的实现细节可以随时更改而不影响使用者。
- 增强可扩展性:抽象让我们可以在不修改现有代码的基础上,轻松添加新的功能。
相关文章:

简介面向对象的封装、继承、多态和抽象
面向对象(Object-Oriented)的特点通常归纳为四个核心概念:封装、继承、多态和抽象。 1. 封装(Encapsulation) 定义: 封装是将对象的属性(数据)和方法(操作)打包在一起&…...

OpenCV + CUDA + cuDNN模块编译
简介 在追求高端性能与资源优化并重的应用场景中,如边缘计算设备或资源受限的开发板上运行YOLO等复杂深度学习模型,采用C结合OpenCV与GPU加速技术相较于传统的Python环境展现出显著优势。这种策略不仅极大地提升了执行效率,还显著降低了运行时…...

Redis 缓存预热、雪崩、穿透、击穿
缓存预热 缓存预热是什么 缓存预热就是系统上线后,提前将相关的缓存数据直接加载到缓存系统。避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题!用户直接查询事先被预热的缓存数据!解决方案 使用 PostConstr…...

仿RabbiteMq简易消息队列基础篇(gtest的使用)
TOC gtest介绍 gtest是google的一个开源框架,它主要用于写单元测试,检查自己的程序是否符合预期行为。可在多个平台上使用(包含Linux,MAC OC,Windows等)。它提供了丰富的断言,致命和非致命失败…...

图像处理中的图像梯度和幅值是什么???(通俗讲解)
在边缘检测和特征提取等任务中,图像的梯度和幅值是图像处理中非常重要的概念。 目录 一、图像的梯度1.1 专业解释1.2 通俗理解1.3 计算方式 二、梯度的幅值2.1 专业解释2.2 通俗理解2.3 计算方式 一、图像的梯度 1.1 专业解释 图像的梯度可以看作是图像中亮度或颜…...

01.计算机网络导论
引言 协议分层 协议分层使我们可以将大任务化简成几个更小、更简单的任务。模块化指的是独立的协议层。一个协议层(模块)可以定义为一个具有输入和输出而不需要考虑输入是如何变成输出的黑匣子。当向两台机器提供相同输入得到相同输出时,它…...

API网关:SpringCloud GateWay
一. 网关的作用及背景 1.API网关的作用 请求路由 在我们的系统中由于同一个接口新老两套系统都在使用,我们需要根据请求上下文将请求路由到对应的接口。 统一鉴权 对于鉴权操作不涉及到业务逻辑,那么可以在网关层进行处理,不用下层到业务…...

【Leetcode 383】赎金信 —— 哈希表 有注解
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以,返回 true ;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 示例 1: 输入&#…...

Linux 常见的冷知识集锦
一、前言 本文旨在记录那些常见的Linux概念和名词,但这些又没经常直接使用到,更多在底层运行,见过却又不是特别清楚的碎片知识,以温故知新。 二、知识点和概念说明 2.1、POSIX标准/协议 POSIX(Portable Operating S…...

【喜报】科大睿智祝贺青岛海信网络科技通过CMMI5级评估
青岛海信网络科技股份有限公司成立于1998年,是海信集团B2B产业的核心力量。其主要从事城市交通、公共交通、智慧公路、交通枢纽、智慧停车、智能网联、大数据管理、城市治理、应急管理、轨道交通智能化和医院、校园、园区等智能化建设领域的产品和解决方案开发、…...

2024全国大学生电子设计大赛全国初赛 E题 三子棋游戏装置 一等奖满分最简方案
感想:电赛初赛控制类题还是蛮简单的,别被五花八门的硬件搞懵了(决赛当我没说)。抓住核心,理念都是通用的。我是计科专业的,因此选择的控制类E题,相对来说背的知识要少很多,更考验智商…...

尚品汇-ES(三十一)
目录: (1)封装搜索相关实体对象 (2)搜索接口封装 (3)在service-list-client模块添加远程接口 (1)封装搜索相关实体对象 搜索参数实体:SearchParam 搜索参…...

NC 跳台阶
系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 一只青蛙一次…...

linux 文件编程
1. 标准IO 也称为标准输入输出(Standard Input/Output),是计算机编程中一种常见的IO操作方式,特别是在C语言及其衍生语言中广泛使用。它主要通过标准C库中的函数来实现,提供了丰富的接口用于数据的输入和输出。 文本文…...

【后端速成 Vue】实现动态表白墙
前言: 通过前面几篇的文章的讲解,已经学习到了很多的 Vue 指令了,那么现在就将学习到的指令利用起来,做一个小的 demo。 最终效果图: 通过效果图可以发现,一共有这几个功能: ● 渲染列表&…...

【日常开发】 java返回ECharts数据结构封装
java返回ECharts数据结构封装 一、前端页面示例图如下: 二、准备测试数据: 三、后端 格式封装代码: 四、最终结果: 🎈边走、边悟🎈迟早会好 一、前端页面示例图如下: 二、准备测试数据&am…...

Table表格控件实现单选功能
Table表格控件实现单选功能 <el-tableref"tableRef"height"385"style"--el-table-border-color: none"row-key"contractId"highlight-current-rowsingle-selectselect"handleSelect":data"contractInfo">&l…...

AI技术加速落地 港科广联手思谋打开智能缺陷检测新纪元
AI 技术应用落地的元年,工业是主战场,尤其是工业缺陷检测。 在“生产制造-缺陷检测-工艺优化-生产制造”的智能制造闭环链条中,基于AI的智能缺陷检测扮演着“把关者”的角色。但这个把关者长期以来却缺少一个称手的工具——样本量大、精度高…...

Python爬虫开发:BeautifulSoup、Scrapy入门
在现代网络开发中,网络爬虫是一个非常重要的工具。它可以自动化地从网页中提取数据,并且可以用于各种用途,如数据收集、信息聚合和内容监控等。在Python中,有多个库可以用于爬虫开发,其中BeautifulSoup和Scrapy是两个非…...

数据科学、数据分析、人工智能必备知识汇总-----常用数据分析方法-----持续更新
数据科学、数据分析、人工智能必备知识汇总-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/140174015 文章目录 一、对比分析法1. 按时间和地区2. 同比和环比 二、分组分析法三、结构分析法四、交叉分析法五、矩阵分…...

学习vue Router 一 起步,编程式导航,历史记录,路由传参
目录 起步,安装 1. 安装 2. 使用 命名路由 编程式导航 1. 字符串模式 2. 对象模式 3. 命名路由模式 历史记录 replace的使用 横跨历史 路由传参 1. query路由传参 2. 动态路由传参 3. 二者的区别 起步,安装 router 路由 因为vue是单页应用…...

Qt/C++最新地图组件发布/历时半年重构/同时支持各种地图内核/包括百度高德腾讯天地图
一、前言说明 最近花了半年时间,专门重构了整个地图组件,之前写的比较粗糙,有点为了完成功能而做的,没有考虑太多拓展性和易用性。这套地图自检这几年大量的实际项目和用户使用下来,反馈了不少很好的建议和意见&#…...

Laravel + Thinkphp 生成二维码
安装依赖 composer require endroid/qr-code 编写ThinkPhP代码 public function index() {// 创建二维码内容$qrCode new QrCode(Hello World);// 设置二维码的配置$qrCode->setSize(300);$qrCode->setMargin(10);// 获取二维码图像$writer new PngWriter();$result…...

2408C++,C++20的无侵入式反射
原文 C17基于结构绑定的编译期反射 事实上不需要宏的编译期反射在C17中已用得很多了,比如struct_pack的编译期反射就不需要宏,因为C17结构绑定可直接得到一个聚集类的成员的引用. struct person {int id;std::string name;int age; }; int main() {person p{1, "tom&qu…...

抽象工厂模式(Abstract factory pattern)- python实现
抽象工厂模式的通俗示例 想象一下,你正在经营一家家具店,你需要从不同的供应商那里采购不同的家具系列。有的供应商提供的是现代风格家具,包括现代沙发、现代椅子和现代桌子;而有的供应商提供的是古典风格家具,包括古…...

adb Connection reset by peer的解决方法
本文同步发于:https://www.cnblogs.com/yeshen-org/p/18350232 最近在编译一个老项目,项目中依赖了很多第三方库,用gradle编译要20-30分钟,而且内存开销很大。 公司配的15G内存的电脑,一次编译能用到14G。 编译的时候&…...

111111111
1111111111111111111...

搜维尔科技:Varjo XR-4使用UE5 打造最具沉浸感的混合现实环境
Varjo XR-4使用UE5打造最具沉浸感的混合现实环境 搜维尔科技:Varjo XR-4使用UE5 打造最具沉浸感的混合现实环境...

从分散到集中:TSINGSEE青犀EasyCVR视频汇聚网关在视频整体监控解决方案中的整合作用
边缘计算视频汇聚网关是基于开放式、大融合、全兼容、标准化的设计架构理念,依据《安全防范视频监控联网系统信息传输、交换、控制技术要求》(GB/T28181-2011)标准开发,集流媒体转发、视频编码、视频管理、标准通信协议、网络穿透…...

React学习-jsx语法
jsx语法,浏览器不认识,需要经过babel编译 https://babeljs.io/ 面试题:jsx的作用? 普通回答:可以在js中返回dom,经过babel编译成js认识的代码import { jsx as _jsx, jsxs as _jsxs } from "react/j…...