Java程序设计与项目案例教程
上QQ阅读APP看书,第一时间看更新

4.2 类和对象的关系

对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。

对象具有状态,一个对象用数据值来描述它的状态。对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中。

对象具有唯一性。每个对象都有自身唯一的标识,通过这种标识,可以找到相应的对象。在对象的整个生命期中,它的标识都不改变,不同的对象不能有相同的标识。

对象有两个层次的概念,现实生活中对象指的是客观世界的实体或事物,可以是有形的(如一辆汽车),也可以是无形的(如一项计划),是构成世界的一个独立单位,具有静态特征(可以用某种数据来描述)、动态特征(对象表现的行为或具有的功能);而程序中对象就是一组变量和相关方法的集合,其中变量表明对象的状态,方法表明对象所具有的行为。对象是系统中用来描述客观事物的一个实体,它是用来构成系统的一个基本单位。对象由一组属性和一组行为构成。属性是用来描述对象静态特征的数据项。行为是用来描述对象动态特征的操作序列。我们可以将现实生活中的对象经过抽象,映射为程序中的对象。对象在程序中是通过一种抽象数据类型(与基本数据类型对应)来描述的,这种抽象数据类型称为类(Class),对象和类示意图如图4-1所示。

图4-1 对象和类示意图

类:具有相同或相似性质的对象的抽象就是类。忽略事物的非本质特征,只注意那些与当前目标有关的本质特征,从而找出事物的共性,把具有共同性质的事物划分为一类,得出一个抽象的概念。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象。

类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。

类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。

在客观世界中有若干类,这些类之间具有一定的结构关系。类之间的关系主要有以下3种。

(1)一般与特殊:某个类实例同时是另一个类的对象。例如,动物类与人类、鸟类与丹顶鹤类。

(2)整体与局部:一个实体的物理构成、空间上的包容及组织机构等。

(3)关联:两个类的对象实例之间具有的某种依赖关系。例如,某人为某个公司工作,教师指导学生论文,某人拥有汽车。

类是描述对象的基本原型,它定义一类对象所能拥有的数据和能完成的操作。在面向对象的程序设计中,类是程序的基本单元。

相似的对象可以归并到同一个类中,就像传统语言中的变量与类型关系一样。

图4-2 对象消息通信

程序中的对象是类的一个实例,是一个软件单元,由一组结构化的数据和在其上的一组操作构成。对象之间进行通信的结构称为消息。在对象的操作中,当一个消息发送给某个对象时,消息包含接收对象去执行某种操作的信息。发送一条消息至少要包括说明接收消息的对象名、发送给该对象的消息名(即对象名、方法名)。一般还要对参数加以说明,参数可以是认识该消息的对象所知道的变量名,或者是所有对象都知道的全局变量名。类中操作的实现过程称为方法,一个方法有方法名、参数、方法体。

对象通过传递消息来相互作用和通信,如图4-2所示。

例4-1】 类的创建。

程序运行结果:

当创建一个类时,创建了一种新的数据类型,我们可以创建该种类型的对象。也就是说,类是对象的模板(Template),而对象就是类的一个实例(Instance)。要获得一个类的对象需要两步。第一步,必须声明该类类型的一个变量,这个变量没有定义一个对象。实际上,它只是一个能够引用对象的简单变量。第二步,该声明要创建一个对象的实际的物理拷贝,并把对于该对象的引用赋给该变量。这是通过使用new运算符实现的。new运算符为对象动态分配(即在运行时分配)内存空间,并返回对它的一个引用。这个引用是new分配给对象的内存地址,然后这个引用被存储在该变量中。这样,在Java中,所有的类对象都必须动态分配内存空间。

例如,在下面程序中可以创建一个对象,也就是类的一个实例。

之后可以使用对象。对象的使用通过一个引用类型的变量来实现,包括引用对象的成员变量和方法,通过英文句点运算符“.”可以实现对变量的访问和方法的调用。例如:

在上面的程序中如下调用方法:

        st.printString();