面向对象的几大特性总结(适合秋招和小白学习的一篇文章)

news2024/11/28 14:06:23

前言:
本篇文章主要讲解面向对象的几大特性相关知识。该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读。

如果文章有什么需要改进的地方欢迎大佬提出,对大佬有帮助希望可以支持下哦~

小威在此先感谢各位小伙伴儿了😁

在这里插入图片描述

以下正文开始

文章目录

  • 面向对象的特性概述
  • 面向对象---封装
  • 面向对象---继承
  • 面向对象---多态
  • 面向对象---抽象

面向对象的特性概述

面向对象编程(Object-Oriented Programming,OOP)是一种以对象为基础,将数据与方法封装在一起的编程范式,其几大特性包括:继承,封装,多态,抽象。

面向对象—封装

封装(Encapsulation):对外部隐藏对象的实现细节,只暴露必要接口,从而提高代码的可维护性、可重用性和安全性。例如,类中的成员变量可以使用访问权限修饰符来限制它们的访问级别,使得其他对象无法直接操作这些变量,只能通过公共方法对其进行间接操作。

在封装的过程中,我们通常使用访问权限修饰符来控制类的成员变量和成员函数的访问级别。访问权限修饰符可以主要分为四种:

  • public:公共访问权限,任何类都可以访问。

  • protected:保护访问权限,只有继承自该类的子类和同一个包中的类可以访问。

  • default:如果一个类或者类的成员不使用任何访问控制符修饰,则它的默认访问级别是default,这个类或者累的成员只能被本包中的其他类访问。

  • private:私有访问权限,只有该类内部的成员函数可以访问。

通过合理的设置访问权限修饰符,我们开发人员可以将对象的状态信息隐藏在类的内部,只暴露必要的接口供外部程序调用。这样一来,即使外部程序攻击了某个类的接口,也无法访问并修改对象的内部状态,从而保证了对象的安全性。

面向对象—继承

继承(Inheritance):**允许新的类继承已有类的属性和方法,在不改变原有类的情况下,扩展和修改其功能,从而降低代码的复杂度、提高代码的可维护性和可复用性。**例如,一个子类可以继承父类的属性和方法,并可以根据需要添加自己的新属性和方法。

在继承中,子类可以继承父类的所有属性和方法,包括公共的成员变量、成员函数、非私有的嵌套类等。对于父类中的私有成员,虽然不能直接使用,但是它们依然会被继承下来,并对子类产生影响。

继承的主要作用是提高代码的可重用性和可维护性。通过继承,我们可以基于已有的类快速创建新的类,从而避免代码的重复和冗余。同时,继承还可以使代码更易于维护和修改。当我们需要对一组类进行修改时,如果这些类都继承自同一个基类,那么我们只需要修改基类的代码,就能够实现对所有子类的修改,从而提高了代码的可维护性。

除此之外,继承还可以实现多态的特性,即同一类型的对象可以有多种形态,即不同的对象可以对同一消息做出不同的响应。在继承中,子类可以重写父类的方法,从而实现多态。多态可以让代码更加灵活,使得我们可以根据需要选择不同的子类来处理相同的消息,而不需要改变方法的调用方式,从而提高了代码的灵活性。

面向对象—多态

多态(Polymorphism):同一类型的对象可以有多种形态,即不同的对象可以对同一消息做出不同的响应。多态可以提高代码的灵活性,使代码更易于扩展和修改。例如,一个父类可以定义一个虚函数,而子类可以重写这个虚函数以实现不同的行为。

多态的实现有两种方式:继承和接口

在继承中,子类可以继承父类的方法,并重写这些方法以实现不同的行为。当我们调用一个父类的对象时,如果该对象是子类的实例,那么就会根据子类的实现来执行该方法,从而实现多态。

在接口中,父类定义了一组抽象方法,而子类需要实现这些方法以提供不同的行为。当我们将子类的对象转换成父类的对象时,这个对象就可以使用父类的接口来调用不同的实现代码,从而实现多态。

多态的主要作用是允许我们编写出更加灵活和可扩展的代码。通过多态,我们可以编写出通用的代码,而不需要专门处理每一个子类。同时,多态还可以让代码更容易拓展和维护。当我们需要添加新的子类时,只需要实现父类定义的接口或者继承父类的方法,而不需要修改原有的代码,从而提高了代码的可扩展性和可维护性。

面向对象—抽象

抽象(Abstraction):将具有共性的实体抽象成类,从而减少代码的重复性,同时也使代码更易于理解和维护。例如,抽象类可以定义一些纯虚函数来声明接口,子类必须实现这些接口以达到抽象类的要求。

在抽象中,我们关注的是事物的本质,而不是具体的实现。因此,抽象可以帮助我们思考问题的高层次结构和关系,促使我们设计更好的软件系统。通过将系统中的复杂性隐藏在抽象接口中,我们可以将程序员的思考焦点放在高层次上,从而减少代码的细节和复杂度,提高软件的可维护性和可扩展性。

在面向对象编程中,抽象通常通过抽象类和接口来实现。抽象类是一种不能被实例化的类,其中包含了至少一个纯虚函数,在具体子类中必须实现该函数才能创建实例。接口是一种纯粹的抽象基础结构,只定义了一个或多个函数原型,没有任何成员变量。接口与抽象类类似,但是接口中的所有方法都是纯虚函数,没有具体实现。

抽象类和接口可以让我们定义一个约束,限制子类的存储或行为方式。这种约束可以保证子类在实现的过程中遵循系统设计需要的规范,从而提高软件质量。

文章到这里就先结束了,感兴趣的可以订阅专栏哈,后续会继续分享相关的知识点。

在这里插入图片描述

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

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

相关文章

Doo Prime 德璞资本:怎么买黄金期货?黄金期货交易特点有哪些?

黄金期货是一种衍生品,是指在期货交易所上交易的黄金合约。作为一种高风险高收益的投资工具,有哪些黄金期货交易特点?本文围绕这一内容展开说明。 黄金期货交易特点一、需要开立账户 黄金期货是期货,如同股票投资要到证券公司开户一样,黄金期…

JVM | Java内存区域

JVM | Java内存区域 1、运行时数据区域1.1、程序计数器(线程私有)1.2、虚拟机栈(线程私有)1.3、本地方法栈(线程私有)1.4、堆(线程共享)1.5、方法区(元空间)(线程共享)1.6、直接内存(线程共享)2、HotSpot 虚拟机对象分配、布局和访问2.1、对象创建流程2.2、对象的…

【高危】Apache Inlong 存在JDBC反序列化漏洞

漏洞描述 Apache InLong 是可用于构建基于流式的数据分析、建模等一站式的海量数据集成框架。 在Apache Inlong受影响版本,由于未对接收的jdbcUrl参数过滤空格字符,导致可以利用空格绕过jdbcUrl中autoDeserialize参数过滤限制,通过认证的攻…

LegalAI领域大规模预训练语言模型的整理、总结及介绍(持续更新ing…)

诸神缄默不语-个人CSDN博文目录 最近更新日期:2023.6.7 最早更新日期:2023.6.7 文章目录 1. 通用大规模预训练语言模型2. 对话模型3. 分句 1. 通用大规模预训练语言模型 英语: LegalBERT 原始论文:(2020 EMNLP) LEGAL-BERT: Th…

Django - 页面静态化基本使用(一)

一. 前言 一个网页会有很多数据是不需要经常变动的,比如说首页,变动频率低而访问量大,我们可以把它静态化,这样就不需要每次有请求都要查询数据库再返回,可以减少服务器压力 我们可以使用Django的模板渲染功能完成页面…

Linux | SFTP

SFTP 文章目录 SFTPSSH 文件传输协议连接获取SFTP帮助查看及切换路径遍历远程文件系统访问本地的文件系统 传输文件传输本地文件到远程服务器简单的文件操作图形界面程序Reference欢迎关注公众号【三戒纪元】 SSH 文件传输协议 FTP,即文件传输协议,是一…

Java中的几种关键字详细介绍(秋招总结篇)

前言: 本篇文章主要讲解Java中的几种关键字相关知识。该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读。 如果文章有什么需要改进的地方欢迎大佬提出,对大佬有帮助希望可以支持下哦~ 小威在此先感谢各位小伙伴儿了😁 以下正文开始 文…

prometheus介绍与安装

prometheus介绍与安装 文章目录 prometheus介绍与安装一、Prometheus 简介1.Prometheus 优势2.Prometheus 基础架构 二、Prometheus 安装1.后端存储配置 三、使用 Prometheus 实现系统监控四、使用 Prometheus Grafana 实现可视化界面四.zabbixgrafana 安装部署参考http://t.c…

【Mininet】基础篇:开源控制器POX

大家好,我是文思月! 每文一言:时间不在于你拥有多少,而在于你如何使用! 本篇文章: 本篇文章主要是基于POX控制器进行的两个实验:一个是使交换机模拟hub(集线器)的功能&a…

逍遥自在学C语言 | 宏定义技巧让你的C代码快人一步

前言 在C语言中,宏定义是一种预处理指令,用于在代码中定义和使用常量、函数或代码片段的替代。 宏定义使用#define关键字来定义,并在代码中进行替换。宏定义具有以下优点: 简化代码:宏定义可以将一些常用的、重复出…

MySQL高可用集群解决方案之:lvs+keepalived+mysql cluster实现负载均衡

一:前言 Mysql-cluster本身实现了高可用,但是其sql节点并没有实现负载均衡。怎样让程序能均衡地访问sql节点呢,程序里写哪个数据库服务器IP呢? LVS是实现负载均衡作用的,即将客户端的需求采用特定的负载均衡算法分发…

在职考研 | 对于朝九晚五的上班族来说同等学力申硕更轻松!

我们要知道的是,考在职研究生的群体90%以上都是朝九晚五的上班族。 他们工作忙,时间和精力都很有限。 考研本身难度就很大,但是既拿不出足够多的备考时间,也没法到线下去上课。 怎么能考上呢? 在这样的现实条件下&…

yolov5部署到android studio

目录 环境获取demo将pt文件导出为ptl文件修改demo修改PrePostProcessor增加ptl文件并增加类别文件修改MainActivity 大功告成 环境 Ubuntu22.10 Pytorch2.0.1cu117 Android Studio Flamingo | 2022.2.1 Patch 1 获取demo git clone https://github.com/pytorch/android-demo…

self Attention 位置编码的奇偶输入问题

attention机制一直是放在encoder-decoder中进行使用,self-attention是为了解决前者结构无法并行计算,而抽离出的概念(前者的编码解码多为时序网络)。 但因为缺少时序模型天然的位置编码特点,所以self-attention模型需要…

Docker镜像大小优化

如何缩小镜像的体积大小? 1)尽可能的使用小体积的基础镜像 2)尽可能减少Dockerfile文件中的指令数量 3)构建镜像步骤最后添加清空系统和应用程序的缓存的命令 4)使用多级(多阶段)构建 FROM A…

亚信科技AntDB数据库荣获赛宝优选信创优秀解决方案奖

近日,由工业和信息化部电子第五研究所主办的中国赛宝信创生态合作伙伴大会暨赛宝优选信创优秀解决方案颁奖仪式在北京成功举办,亚信科技AntDB数据库信创解决方案“业务支撑系统核心数据库迁移改造”从千余案例中脱颖而出,荣获赛宝优选信创优秀…

文件描述符表

文章目录 1. 文件描述符1.1 前言1.2 理解文件1.3 文件描述附表1.4 打开文件时1.5 默认打开的三个文件 2. 重定向2.1 瞅瞅2.2 dup22.3 实现原理 3. 一切皆文件 1. 文件描述符 1.1 前言 环境:Linux 2.6 在 Linux 中,有句话叫做「一切皆文件」&#xff0…

Coinbase:如有必要,不惜在最高法院与SEC“一决胜负”!

6日早间,央视财经频道(CCTV-2)对“币安及其首席执行官被美证交会(SEC)起诉”进行了报道。 值得一提的是,央视并不常播报加密货币相关新闻,上一次是关于香港监管框架,赵长鹏&#xff…

< 每日算法:一文带你认识 “ 双指针算法 ” >

每日算法:初识双指针算法 👉 1. 双指针概念:👉 2. 左右指针> 案例一:二分查找> 案例二:双指针 - 移除元素 👉 3. 快慢指针> 案例一: 删除排序数组中的重复项 👉…

MySQL8安装详细教程

MySQL8安装详细教程 一、下载二、安装三、配置环境 一、下载 官网下载:点击跳转 进入官网后,如下界面 点击Archives可以选择版本进行下载,如下图根据描述操作即可。 百度云下载链接:点击跳转 或者复制到浏览器打开:链…