当前位置:文档之家› 第10章类和对象

第10章类和对象

第10章类和对象本章工作任务➢实现学校类,并描述学校的信息➢实现教员类,并输出教员的信息➢实现学生类,并输出学生的信息本章技能目标➢掌握类和对象的特征➢理解封装➢会创建和使用对象使用Java理解程序逻辑本章单词请在预习时学会下列单词的含义和发音,并填写在横线处。

1.class:2.object:3.OOP:4.return:5.encapsulation:6.null:7.initial:8.type:类和对象本章简介在前面章节中,我们学习了程序设计的基本知识和流程控制语句。

通过这些内容的学习,大家能够用Java语言进行程序设计,但这些程序的规模都很小,一般只有几十行代码。

假设我们要编程解决一个很大的问题,需要写几万行代码,如果按照以前的做法,将这些代码都放在一个Java文件中,可以想象这个文件会非常冗长,而且很难维护。

因此,在下面的课程中,你将看到Java程序设计的另一道风景——面向对象程序设计,英语缩写为OOP。

面向对象程序设计是一个里程碑,Alan Kay因为设计了世界上第一个面向对象语言Smalltalk而获得图灵奖。

Java之父James Gosling结合Internet背景设计了完全面向对象的Java语言。

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

10.1 对象首先问你一个问题,“世界是由什么组成的?”。

如果你是一个化学家,你可能会说,“世界是由分子、原子、离子等这些化学物质组成的”。

如果你是一个画家,你可能会说,“世界是由不同的颜色组成的”。

不同的人会有不同的回答。

但如果你是一个分类学家,你会说,“这个世界是由不同类别的事物组成的”,如图10.1所示。

图10.1 世界的组成其实,这个问题本身就比较抽象,我们说物以类聚,所以可以说世界是由不同类别的事物构成,如图10.1中所示,世界由动物、植物、物品、人和名胜等组成。

动物可以分为脊椎动物和无脊椎动物。

脊椎动物又可以分为哺乳类、鱼类、爬行类、鸟类和两栖类。

爬行类又可以分为有足类和无足类……,就这样可以继续分下去。

当我们提到某一个分类时,就可以找到属于该分类的一个具体的事物。

比如乌龟就属于爬行类中的有足类,使用Java理解程序逻辑眼镜蛇就属于爬行类中的无足类。

当我们提到这些具体动物时,会在脑海浮现出它们的形象。

这些现实世界中客观存在的事物就称为对象。

在Java的世界中,“万物皆对象”!作为面向对象的程序员,我们要站在分类学家的角度去思考问题。

根据要解决的问题,将事物进行分类。

说明分类是人们认识世界的一个很自然的过程,在日常生活中会不自觉地进行分类。

比如我们可以将食物分为可食的和不可食的,将交通工具分为车、船、飞机等。

分类就是按照事物的性质、特点、用途等作为区分的标准,将符合同一标准的事物归为一类,不同的则分开。

比如上文对动物的分类中,根据动物有无脊椎可分为脊椎动物和无脊椎动物,如果根据动物是水生还是陆生,又可分为水生动物和陆生动物。

因此,在实际应用中,我们要根据待解决问题的需要,选择合适的标准或角度对问题中出现的事物进行分类。

10.1.1 身边的对象现实世界中客观存在的任何事物都可以被看作对象。

它可以是有形的,比如一辆汽车;它也可以是无形的,比如一项计划。

因此对象无处不在。

Java是一种面向对象的语言,因此我们要学会用面向对象的思想考虑问题和编写程序。

在面向对象中,对象是用来描述客观事物的一个实体。

用面向对象方法解决问题时,首先要对现实世界中的对象进行分析与归纳,找出哪些对象与我们要解决的问题是相关的。

下面以商场中的两个对象为例,看看我们身边的对象,如图10.2所示。

张浩在超市购物后要刷卡结账,收银员李明负责收款并打印账单。

在这个问题中,张浩和李明就是我们所关心的对象。

下面选择一个角度对他们分类,比如两人的角色不同,张浩是顾客,而李明是收银员,因此可以说,张浩是“顾客”对象,而李明是“收银员”对象。

图10.2 “顾客”对象和“收银员”对象既然他们都是对象,如何区分呢?其实每一个对象都有自己的特征,包括静态特征和动态特征。

静态特征是可以用某些数据来描述的特征,比如人的姓名、年龄等。

动态特征类和对象是对象所表现的行为或对象所具有的功能,比如购物、收款等。

对上面的例子,我们可以得到表10-1。

表10-1 不同对象的静态特征和行为对照表对象静态特征静态特征的值动态特征“顾客”对象姓名张浩购买商品张浩年龄 20体重 60kg“收银员”对象员工号 10001 收款李明姓名李明打印账单部门财务部通过表10-1,我们可以看到,不同类别中的对象具有不同的静态特征和动态特征。

如果要将上面的信息存储在计算机中,该如何做呢?10.1.2 对象的属性和方法通过超市购物的例子可以看到,正是因为对象拥有了这些静态特征和动态特征才使得他们与众不同。

在面向对象的编程思想中,我们把对象的静态特征和动态特征分别称为对象的属性和方法,它们是构成对象的两个主要因素。

其中属性是用来描述对象静态特征的一个数据项,该数据项的值即属性值。

比如上面例子中,“顾客”对象有一个属性是姓名,属性值是张浩。

而方法是用来描述对象动态特征(行为)的一个动作序列。

比如“收银员”对象的行为有收款和打印账单,这些都是对象的方法。

在编程中,对象的属性被存储在一些变量里,比如可以将“姓名”存储在一个字符串类型的变量中,将“员工号”存储在一个整型变量中。

对象的行为则通过定义方法来实现,比如“收款”、“打印账单”都可以定义为一个方法。

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

10.1.3 封装顾名思义,封装(Encapsulation)就是把一个事物包装起来,并尽可能隐藏内部细节,如图10.3所示。

图10.3 法拉利跑车使用Java理解程序逻辑图10.3中是一辆法拉利跑车。

在这辆车未组装前,是一堆零散的部件,比如发动机、方向盘等,仅仅这些部件是不能发动的。

当把这些部件组装完成后,才具有发动的动能。

显然,这辆法拉利跑车是一个对象,而零部件就是该对象的属性,发动、加速、刹车等行为就是该对象所具有的方法。

通过上面的分析可以看到,对象的属性和方法是相辅相成,不可分割的,它们共同组成了实体对象。

因此,对象具有封装性。

10.2 类上面提到了一位顾客“张浩”,但在现实世界中有很多顾客,张三、李四、王五等。

因此,“张浩”只是顾客这一类人中的一个实例。

又如,“法拉利跑车”是一个对象,但现实世界中还有奔驰、保时捷、凯迪拉克等车,因此“法拉利跑车”只是车这一类别中的一个实例。

不论哪种车,都有一些共同的属性,比如品牌、颜色等,也有一些共同的行为,比如发动、加速、刹车等,在这里我们将这些共同的属性和行为组织到一个单元中,就得到了类。

解释类:具有相同属性和方法的一组对象的集合。

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

类的属性:对象所拥有的静态特征在类中表示时称为类的属性。

例如,所有顾客都有姓名,因此姓名可以称为“顾客类”的属性,只是不同对象的这一属性值不同,比如,顾客张三和顾客李四的姓名不同。

类的方法:对象执行的操作称为类的方法。

例如,所有顾客都有购物行为,因此购物就是“顾客类”的一个方法。

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

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

➢球的半径。

➢冰淇淋的口味。

使用这个模具做出来的不同大小和口味的冰淇淋是对象。

在Java面向对象编程中,我们就用这个类模型创建出类的一个实例,即创建类的一个对象。

因此,类和对象的关系就如同模具和用这个模具制作出的物品之间的关系。

一个类为它的全部对象给出了一个统一的定义,而它的每个对象则是符合这种定义的一个实体。

因此类和对象的关系就是抽象和具体的关系。

类是多个对象进行综合抽象的结果,是实体对象的概念模型,而一个对象是一个类的实例。

图10.5展示了在我们生活的现实世界,大脑中的概念世界和程序运行的计算机世界中,类和对象的关系。

图10.5 现实世界、概念世界和计算机世界中的类与对象在我们生活的“现实世界”中,有一个个具体的“实体”。

以超市中为例,在超市中有很多顾客,张三、李四、王五等,而“顾客”这个角色就是在我们大脑的“概念世界”中形成的“抽象概念”。

当我们需要把顾客这一“抽象概念”定义到计算机中时,就形成了“计算机世界”中的“类”,也就是我们上面内容所讲的类。

而用类创建的一个实例就是“对象”,它和“现实世界”中的“实体”是一一对应的。

10.2.2 类是对象的类型到目前为止,我们已经学习了很多数据类型,比如整型(int)、双精度浮点型(double)、字符型(char)等。

这些都是Java语言已经定义好的类型,我们编程时只需要用这些类型声明变量即可。

那么,如果想描述顾客“张浩”,他的数据类型是什么呢?字符型还是字符串型?其实都不是。

“张浩”的类型就是“顾客”,也就是说,类就是对象的类型。

使用Java理解程序逻辑事实上,定义类就是定义了一个自己的数据类型。

例如“顾客”类、“人”类、“动物”类等。

10.3 Java是面向对象的语言在面向对象程序设计中,类是程序的基本单元,Java是完全面向对象的语言,所有程序都是以类为组织单元的。

回想一下你写过的每一个程序,基本框架是不是如示例1所示的样子。

示例1public class HelloWorld{public static void main(String[] args){System.out.println(“Hello World”);}}分析示例1,程序框架最外层的作用就是定义了一个类HelloWorld,我们在第1章曾提到HelloWorld是一个类名,原因就在此。

10.3.1 Java的类模板学习了类,对象的相关知识,那如何在Java中描述它们呢?Java中的类将现实世界中的概念模拟到计算机中,因此我们需要在类中描述类所具有的所有属性和方法。

Java的类模板如下所示。

语法public class <类名>{//定义属性部分属性1的类型属性1;属性2的类型属性2;……属性3的类型属性3;//定义方法部分方法1;方法2;……方法n;}类和对象在Java中要创建一个类,需要使用一个class,一个类名和一对表示程序体的大括号。

其中,class是创建类的关键字。

在class前有一个public,表示“公有”的意思。

编写程序时,要注意编码规范,不要漏写public。

在class关键字的后面要给定义的类命名,然后写上一对大括号,类的主体部分就写在{}中。

类似于给变量命名,类的命名也要遵循一定的规则。

相关主题