Java类与对象-1

简介: 实现学校类、学员类、教员类实现管理员类、客户类更改管理员密码实现客户积分回馈本章技能目标

本章工作任务


实现学校类、学员类、教员类

实现管理员类、客户类

更改管理员密码

实现客户积分回馈

本章技能目标


掌握类和对象的特征

理解封装

会创建和使用对象

本章介绍


在前面章节中,大家学习了程序设计的基本知识和流程控制语句。通过这些内容的学习,大家能够用Java语言进行程序设计,但这些程序的规模都很小,一般只有几十行代码。假设要编程解决一个很大的问题,需要写几万行代码,如果按照以前的做法,将这些代码都放在一个Java文件中,可以想象这个文件会非常冗长,而且很难维护。


因此,在下面的课程中,学员们将看到Java程序设计的另一道风景——面向对象程序设计,英语缩写为OOP。面向对象程序设计是一个里程碑,Alan Kay因为设计了世界上第一个面向对象语言Smalltalk而获得图灵奖。Java之父James Gosling结合Internet背景设计了完全面向对象的Java语言。


本章将带领学员们进入面向对象的世界,学习什么是对象和类,以及如何创建和使用类的对象。


技术内容


11.1 对象


世界是由什么组成的?化学家可能会说:"世界是由分子、原子、离子等这些化学物质组成的"。画家可能会说:"世界是由不同的颜色组成的"。不同的人会有不同的回答。但如果你是一个分类学家,你会说:"这个世界是由不同类别的事物组成的",如图11.1所示。



图11.1世界的组成


其实,这个问题本身就比较抽象,物以类聚,所以可以说世界是由不同类别的事物构成的,如图11.1所示,世界由动物、植物、物品、人和名胜等组成。动物可以分为脊椎动物和无脊椎动物。脊椎动物又可以分为哺乳类、鱼类、爬行类、鸟类和两栖类。爬行类又可以分为有足类和无足类……就这样可以继续分下去。当提到某一个分类时,就可以找到属于该分类的一个具体的事物。例如,乌龟就属于爬行类中的有足类,眼镜蛇就属于爬行类中的无足类。当我们提到这些具体动物时,会在脑海浮现出它们的形象。这些现实世界中客观存在的事物就称为对象。在Java的世界中,"万物皆对象"。


学习面向对象编程,我们要站在分类学家的角度去思考问题。根据要解决的问题,对事物进行分类。


说明:分类是人们认识世界的一个很自然的过程,人们在日常生活中会不自觉地进行分类。例如,我们可以将垃圾分为可回收的和不可回收的,将交通工具分为车、船、飞机等。分类就是以事物的性质、特点、用途等作为区分的标准,将符合同一标准的事物归为一类,不同的则分开。例如,上文对动物的分类中,根据动物有无脊椎可分为脊椎动物和无脊椎动物;如果根据动物是水生还是陆生,又可分为水生动物和陆生动物。因此,在实际应用中,我们要根据待解决问题的需要,选择合适的标准或角度对问题中出现的事物进行分类。


11.1.1 身边的对象

现实世界中客观存在的任何事物都可以被看做对象。对象可以是有形的,如一辆汽车;它也可以是无形的,如一项计划。因此对象无处不在。


Java是一种面向对象的编程语言(Object Oriented Programming Language,OOPL),因此我们要学会用面向对象的思想考虑问题和编写程序。在面向对象中,对象是用来描述客观事物的一个实体。用面向对象的方法解决问题时,首先要对现实世界中的对象进行分析与归纳,找出哪些对象与要解决的问题是相关的。



下面以商场中的两个对象为例,分析我们身边的对象,如图11.2所示。张浩在超市购物后要刷卡结账,收银员李明负责收款并打印账单。在这个问题中,张浩和李明就是我们所关心的对象。下面选择一个角度对他们分类,如两人的角色不同,张浩是顾客,而李明是收银员,因此可以说,张浩是 "顾客" 对象,而李明是 "收银员" 对象。



图11.2  “顾客” 对象和 “收银员” 对象


既然他们都是对象,那么如何区分呢?其实每一个对象都有自己的特征,包括静态特征和动态特征。静态特征是可以用某些数据来描述的特征,如人的姓名、年龄等。动态特征是对象所表现的行为或对象所具有的功能,如购物、收款等。根据上面的例子,可以得到表11-1。


表11-1不同对象的静态特征和行为对照



image.png


通过表11-1可以看到,不同类别中的对象具有不同的静态特征和动态特征。如果要将上面的信息存储在计算机中,该如何做呢?


11.1.2对象的属性和方法

通过超市购物的例子可以看到,正是因为对象拥有了这些静态特征和动态特征,才使得他们与众不同。在面向对象的编程思想中,把对象的静态特征和动态特征分别称为对象的属性和方法,它们是构成对象的两个主要因素。其中属性是用来描述对象静态特征的一个数据项,该数据项的值即属性值。例如,上面例子中,"顾客" 对象有一个属性是姓名,属性值是张浩。而方法是用来描述对象动态特征(行为)的一个动作序列。例如,"收银员"对象的行为有收款和打印账单,这些都是对象的方法。


在编程中,对象的属性被存储在一些变量里,如可以将"姓名"存储在一个字符串类型的变量中,将"员工号"存储在一个整型变量中。对象的行为则通过定义方法来实现,如"收款"、"打印"、"账单"都可以定义为一个方法。


解释:对象:用来描述客观事物的一个实体,由一组属性和方法构成。


11.1.3 封装

封装(Encapsulation)就是把一个事物包装起来,并尽可能隐藏内部细节。


图11.3中是一辆法拉利跑车。这辆车在组装前是一堆零散的部件,如发动机、方向盘等,仅靠这些部件是不能发动车的。当把这些部件组装完成后,它才具有发动的功能。显然,这辆法拉利跑车是一个对象,而零部件就是该对象的属性,发动、加速、刹车等行为就是该对象所具有的方法。通过上面的分析可以看到,对象的属性和方法是相辅相成,不可分割的,它们共同组成了实体对象。因此,对象具有封装性。



图 11.3 法拉利跑车


11.2 类

上文提到了一位顾客"张浩",但在现实世界中有很多顾客,张三、李四、王五等。因此,"张浩"只是顾客这一类人中的一个实例。又如,图11.3的"法拉利跑车"是一个对象,但现实世界中还有奔驰、保时捷、凯迪拉克等车,因此这辆"法拉利跑车"只是车这一类别中的一个实例。不论哪种车,都有一些共同的属性,如品牌、颜色等,也有一些共同的行为,如发动、加速、刹车等,在这里将这些共同的属性和行为组织到一个单元中,就得到了类。


类定义了对象将会拥有的特征(属性)和行为(方法)。


类的属性:对象所拥有的静态特征在类中表示时称为类的属性。例如,所有顾客都有姓名,因此姓名可以称为"顾客类"的属性,只是不同对象的这一属性值不同,如顾客张三和顾客李四的姓名不同。


类的方法:对象执行的操作称为类的方法。例如,所有顾客都有购物行为,因此购物就是"顾客类"的一个方法。


11.2.1 类和对象的关系

了解了类和对象的概念,你会发现它们之间既有区别又有联系。例如,图11.4所示为用模具制作球状冰淇淋的过程。


不同大小口味的冰淇淋(对象)


制作


模具(类)


1



图 11.4 制作球状冰淇淋


制作球状冰淇淋的模具是类,它定义了如下信息(属性)。


球的半径。

冰淇淋的口味。

使用这个模具做出来的不同大小和口味的冰淇淋是对象。在Java面向对象编程中,就用这个类创建出类的一个实例,即创建类的一个对象。


因此,类与对象的关系就如同模具和用这个模具制作出的物品之间的关系。一个类为它的全部对象给出了一个统一的定义,而它的每个对象则是符合这种定义的一个实体。因此类和对象的关系就是抽象和具体的关系。类是多个对象进行综合抽象的结果,是实体对象的概念模型,而一个对象是一个类的实例。图11.5展示了在现实世界、大脑中的概念世界和程序运行的计算机世界中类和对象的关系。



图11.5现实世界、概念世界和计算机世界中的类与对象


在现实世界中,有一个个具体的"实体"。以超市为例,在超市中有很多顾客,张三、李四、王五等,而"顾客"这个角色就是在我们大脑的"概念世界"中形成的"抽象概念"。当需要把顾客这一"抽象概念"定义到计算机中时,就形成了"计算机世界"中的"类",即上面所讲的类。而用类创建的一个实例就是"对象",它和"现实世界"中的"实体"是一一对应的。


11.2.2 类是对象的类型

到目前为止,我们已经学习了很多数据类型,如整型(int)、双精度浮点型(double)、字符型(char)等。这些都是Java语言已经定义好的类型,编程时只需要用这些类型声明变量即可。


那么,如果想描述顾客"张浩",他的数据类型是什么呢?是字符型还是字符串型?其实都不是。"张浩"的类型就是"顾客",也就是说,类就是对象的类型。


事实上,定义类就是抽取同类实体的共性自定义的一种数据类型。例如,"顾客"类、"人"类、"动物"类等。


相关文章
|
3月前
|
Java 编译器 API
Java 密封类:精细化控制继承关系
Java 密封类:精细化控制继承关系
279 83
|
14天前
|
安全 Java 数据建模
Java记录类:简化数据载体的新选择
Java记录类:简化数据载体的新选择
166 101
|
14天前
|
安全 Java 开发者
Java记录类:简化数据载体的新方式
Java记录类:简化数据载体的新方式
188 100
|
2月前
|
安全 IDE Java
Java记录类型(Record):简化数据载体类
Java记录类型(Record):简化数据载体类
299 120
|
4月前
|
IDE Java 数据挖掘
Java 基础类从入门到精通实操指南
这份指南专注于**Java 17+**的新特性和基础类库的现代化用法,涵盖开发环境配置、数据类型增强(如文本块)、字符串与集合处理进阶、异常改进(如密封类)、IO操作及实战案例。通过具体代码示例,如CSV数据分析工具,帮助开发者掌握高效编程技巧。同时提供性能优化建议和常用第三方库推荐,适合从入门到精通的Java学习者。资源链接:[点此下载](https://pan.quark.cn/s/14fcf913bae6)。
184 36
|
5月前
|
存储 安全 Java
【高薪程序员必看】万字长文拆解Java并发编程!(7):不可变类设计指南
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发编程中Java不可变类设计指南,废话不多说让我们直接开始。
81 0
|
2月前
|
缓存 安全 Java
Java反射机制:动态操作类与对象
Java反射机制是运行时动态操作类与对象的强大工具,支持获取类信息、动态创建实例、调用方法、访问字段等。它在框架开发、依赖注入、动态代理等方面有广泛应用,但也存在性能开销和安全风险。本文详解反射核心API、实战案例及性能优化策略,助你掌握Java动态编程精髓。
|
2月前
|
存储 安全 Java
Java集合框架(一):List接口及其实现类剖析
本文深入解析Java中List集合的实现原理,涵盖ArrayList的动态数组机制、LinkedList的链表结构、Vector与Stack的线程安全性及其不推荐使用的原因,对比了不同实现的性能与适用场景,帮助开发者根据实际需求选择合适的List实现。
|
3月前
|
Java API
Java API中Math类功能全景扫描
在实际使用时,这些方法的精确度和性能得到了良好的优化。当处理复杂数学运算或高精度计算时,`Math`类通常是足够的。然而,对于非常精细或特殊的数学运算,可能需要考虑使用 `java.math`包中的 `BigDecimal`类或其他专业的数学库。
92 11