Java面向对象:对象的概念及面向对象的三个基本特征

news2024/9/17 8:46:08

面向对象简称 OO(Object Oriented),20 世纪 80 年代以后,有了面向对象分析(OOA)、 面向对象设计(OOD)、面向对象程序设计(OOP)等新的系统开发方式模型的研究。

对 Java 语言来说,一切皆是对象。把现实世界中的对象抽象地体现在编程世界中,一个对象代表了某个具体的操作。

一个个对象最终组成了完整的程序设计,这些对象可以是独立存在的,也可以是从别的对象继承过来的。对象之间通过相互作用传递信息,实现程序开发。

对象的概念

Java 是面向对象的编程语言,对象就是面向对象程序设计的核心。所谓对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种具体的概念。

对象有以下特点:

  • 对象具有属性和行为。
  • 对象具有变化的状态。
  • 对象具有唯一性。
  • 对象都是某个类别的实例。
  •  一切皆为对象,真实世界中的所有事物都可以视为对象。

例如,在真实世界的学校里,会有学生和老师等实体,学生有学号、姓名、所在班级等属性(数据),学生还有学习、提问、吃饭和走路等操作。学生只是抽象的描述,这个抽象的描述称为“类”。

在学校里活动的是学生个体,即张同学、李同学等,这些具体的个体称为“对象”,“对象”也称为“实例”。

面向对象的三大核心特性

面向对象开发模式更有利于人们开拓思维,在具体的开发过程中便于程序的划分,方便程序员分工合作,提高开发效率。面向对象程序设计有以下优点。

  1. 可重用性:代码重复使用,减少代码量,提高开发效率。下面介绍的面向对象的三大核心特性(继承、封装和多态)都围绕这个核心。
  2. 可扩展性:指新的功能可以很容易地加入到系统中来,便于软件的修改。
  3. 可管理性:能够将功能与数据结合,方便管理。

该开发模式之所以使程序设计更加完善和强大,主要是因为面向对象具有继承、封装和多态 3 个核心特性。

继承性

如同生活中的子女继承父母拥有的所有财产,程序中的继承性是指子类拥有父类的全部特征和行为,这是类之间的一种关系。Java 只支持单继承。

例如定义一个语文老师类和数学老师类,如果不采用继承方式,那么两个类中需要定义的属性和方法如语文老师类和数学老师类中的属性和方法所示。

语文老师类和数学老师类中的属性和方法

从语文老师类和数学老师类中的属性和方法中能够看出,语文老师类和数学老师类中的许多属性和方法相同,这些相同的属性和方法可以提取出来放在一个父类中,这个父类用于被语文老师类和数学老师类继承。

当然父类还可以继承别的类,如父类继承示例图所示。

父类继承示例图

总结父类继承示例图中的继承关系,可以用概括的树形关系来表示,如类继承示例图所示。

类继承示例图


从类继承示例图中可以看出,学校主要人员是一个大的类别,老师和学生是学校主要人员的两个子类,而老师又可以分为语文老师和数学老师两个子类,学生也可以分为班长和组长两个子类。

使用这种层次形的分类方式,是为了将多个类的通用属性和方法提取出来,放在它们的父类中,然后只需要在子类中各自定义自己独有的属性和方法,并以继承的形式在父类中获取它们的通用属性和方法即可。

提示:C++ 支持多继承,多继承就是一个子类可有多个父类。

例如,客轮是轮船也是交通工具,客轮的父类是轮船和交通工具。

多继承会引起很多冲突问题,因此现在很多面向对象的语言都不支持多继承。

Java 语言是单继承的,即只能有一个父类,但 Java 可以实现多个接口(接口类似于类,但接口的成员没有执行体。可以防止多继承所引起的冲突问题。

封装性

封装是将代码及其处理的数据绑定在一起的一种编程机制,该机制保证了程序和数据都不受外部干扰且不被误用。

封装的目的在于保护信息,使用它的主要优点如下:

  • 保护类中的信息,它可以阻止在外部定义的代码随意访问内部代码和数据。
  • 隐藏细节信息,一些不需要程序员修改和使用的信息,比如取款机中的键盘,用户只需要知道按哪个键实现什么操作就可以,至于它内部是如何运行的,用户不需要知道。
  • 有助于建立各个系统之间的松耦合关系,提高系统的独立性。当一个系统的实现方式发生变化时,只要它的接口不变,就不会影响其他系统的使用。例如 U 盘,不管里面的存储方式怎么改变,只要 U 盘上的 USB 接口不变,就不会影响用户的正常操作。
  • 提高软件的复用率,降低成本。每个系统都是一个相对独立的整体,可以在不同的环境中得到使用。例如,一个 U 盘可以在多台电脑上使用。

Java 语言的基本封装单位是类。由于类的用途是封装复杂性,所以类的内部有隐藏实现复杂性的机制。

Java 提供了私有和公有的访问模式,类的公有接口代表外部的用户应该知道或可以知道的每件东西,私有的方法数据只能通过该类的成员代码来访问,这就可以确保不会发生不希望的事情。

多态性

面向对象的多态性,即“一个接口,多个方法”

多态性体现在父类中定义的属性和方法被子类继承后,可以具有不同的属性或表现方式。

多态性允许一个接口被多个同类使用,弥补了单继承的不足。

多态概念可以用树形关系来表示,如多态示例图所示。

多态示例图

从多态示例图中可以看出,老师类中的许多属性和方法可以被语文老师类和数学老师类同时使用,这样也不易出错。

Java入门基础视频教程,java零基础自学就选黑马程序员Java入门教程(含Java项目和Java真题)

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

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

相关文章

element-ui 中 el-tree 和 el-table 样式调整

使用 el-tree 和 el-table 时&#xff0c;往往需要根据项目整体环境做一些样式调整&#xff0c;记录一下常用样式。 el-tree <!-- 树结构 --> <el-treeref"tree":data"data":props"defaultProps":default-expand-all"isExpanded&…

51单片机烟雾报警器mq2烟雾报警ADC0832采集实践制作DIY- GC0026-烟雾报警器

一、功能说明&#xff1a; 基于51单片机设计-烟雾报警器 功能介绍&#xff1a; STC89C52单片机&#xff08;AT89C51/52&#xff09;lcd1602adc0832mq2烟雾传感器蜂鸣器2个按键设定报警阈值 1.通过ADC0832采集MQ2烟雾输出的电压换算位烟雾浓度0~100 2.如果烟雾浓度超过设定…

机器学习9衡量线性回归法的指标,MSE,RMS,MAE

文章目录一、衡量线性回归法的指标&#xff0c;MSE,RMS,MAE1、MSE均方误差&#xff08;Mean Squared Error&#xff09;2、RSE均方误差&#xff08;Root Mean Squared Error&#xff09;3、平均绝对误差MAE&#xff08;Mean Absolute Error&#xff09;二、演示&#xff1a;三、…

清华、北大、中科大、UMA、MSU五位博士生畅聊深度学习理论

点击蓝字关注我们AI TIME欢迎每一位AI爱好者的加入&#xff01;伴随着深度学习的蓬勃发展&#xff0c;进入人们视线的好像都是算法或AlphaGo等应用层面的东西。但是在理论上&#xff0c;深度学习似乎却没有很出圈的相关理论。因此&#xff0c;部分人也在批评深度学习是缺乏理论…

易基因课程回顾|表观遗传学和表观育种在品种改良中的应用研究

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 传统作物育种包括杂交、选择所需性状的遗传变异&#xff0c;导致遗传基础缩窄和遗传多样性缺失&#xff0c;从而阻碍作物改良。表型性状受遗传学和表观遗传学影响&#xff0c;利用表观遗传…

简单个人网页设计作业 静态HTML个人主题网页作业 DW个人网站模板下载 大学生简单个人网页作品代码 个人网页制作 学生个人网页Dreamweaver设计作业

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

Spring框架(十二):实现日志功能通过SpringBean后处理器

实现日志功能通过SpringBean后处理器引子需求分析实现Log功能Spring Bean的后置处理器引子 痛定思痛&#xff0c;主要问题出现在自己雀氏不熟悉框架底层、一些面试题&#xff0c;以及sql的一些情况淡忘了。 本章节的开始是对于过去的重新回顾&#xff0c;当然&#xff0c;我也…

技术分享 | 使用 Zabbix + Grafana 搭建服务器监控系统

搭建 Linux 服务器监控的目的是防止以下现象&#xff1a;自己有一台阿里云服务器内存是 2g 的 , 多开一些软件就会把内存和 CPU 使用率弄的很高&#xff0c;最终导致服务器卡死。 所以基于这个痛点&#xff0c;想知道当前的 CPU 和内存是多少。阿里云 ECS 控制台中也提供对服务…

【自适应滤波】基于FxLMS的样条自适应滤波算法分析(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

DockerCompose安装、使用及微服务部署实操

1 什么是DockerCompose DockerCompose是基于Compose文件帮助我们快速的部署分布式应用。 解决容器需手动一个个创建和运行的问题&#xff01; Compose文件本质上是一个文本文件&#xff0c;其通过指令定义集群中的每个容器如何运行。 我们可以将其看做是将多个docker run命令…

RTLinux的介绍

RTLinux RTLinux是由美国新墨西哥州的fsmlabs(finite state machine labs, 有限状态机实验室)公司开发的、利用linux开发的面向实时和嵌入式应用的操作系统。在rtlinux宣言中&#xff0c;这样描述rtlinux &#xff1a; rtlinux is the hard realtime variant of linux that mak…

基于LLVM的AFL分析

简介 Fuzzing是指通过构造测试输入&#xff0c;对软件进行大量测试来发现软件中的漏洞的一种模糊测试方法。当前大多数远程代码执行和特权提升等比较严重的漏洞都是使用Fuzzing技术挖掘的&#xff0c;Fuzzing技术被证明是当前鉴别软件安全问题方面最强大测试技术。 然而Fuzzin…

Linux Shell 脚本的10个高频面试问答

Linux 的浩瀚无垠&#xff0c;使人总能每次都提交与众不同的内容。这些内容不仅对他们的职业生涯很有用&#xff0c;同时也让他们增长知识。在此&#xff0c;我们就尝试这么去做&#xff0c;至于能取得多大的成功&#xff0c;就由我们的读者朋友们来判断吧。 在此&#xff0c;…

CopyOnWriteArrayList真的线程安全吗?

前几天刷博客时&#xff0c;无意中看到一篇名为《CopyOnWriteArrayList真的完全线程安全吗》博客。心中不禁泛起疑问&#xff0c;它就是线程安全的啊&#xff0c;难道还有啥特殊情况&#xff1f; 我们知道CopyOnWrite的核心思想正如其名&#xff1a;写时复制。在对数据有修改操…

只要背着电脑,他可以去任何地方

12月是微软全球开发者月&#xff0c;MSDN 微软开发者社区将在此期间推出特别专栏《技术狂旅》&#xff0c;解读这些技术狂热爱好者的个人经历&#xff0c;循着他们的人生旅程看到我们自己的影子&#xff0c;希望能带给你一些启发或激励&#xff0c;一起探寻自身更多的可能性。 …

Android三种数据存储的方式

文章目录Android数据存储技术持久化技术文件存储将数据存储到文件当中示例_将数据存储到文件当中示例_从文件当中读取数据SharedPreferences存储将数据存储到SharedPreferences1.Context类中getSharedPreferences()方法2.Activity类中的getSharedPreferences()方法往SharedPref…

html+css鼠标悬停发光按钮![HTML鼠标悬停的代码]使用HTML + CSS实现鼠标悬停的一些奇幻效果!

源码如下: <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title></title> <style> *{ /* 初始化 清除页面元素得内外边距 */ paddin…

【HTML期末作业】大学生抗疫感动专题网页设计作业 抗疫最美逆行者网页 致敬疫情感动人物网页设计制作

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

LIN总线入门

文章目录 前言一、LIN简介1.1 什么是LIN&#xff1f;1.2 为什么要LIN总线1.3 LIN的发展历史1.4 LIN子网1.5 LIN节点1.6 LIN总线特点 二、LIN的协议层2.1 帧结构2.1.1 同步间隔段(Break Field)2.1.2 同步段(Sync Byte Field)2.1.3 受保护 ID 段(Protected Identifier Field)2.1.…

SpringBoot3.x中spring.factories功能被移除的解决方案

背景笔者所在项目组在搭建一个全新项目的时候选用了SpringBoot3.x&#xff0c;项目中应用了很多SpringBoot2.x时代相关的第三方组件例如baomidou出品的mybatis-plus、dynamic-datasource等。在配置好相关依赖、最小启动类和配置之后&#xff0c;发现项目无法启动。于是根据启动…