类的概念是为了让程序设计语言能更清楚地描述日常生活中的事物。类是对某一类事物的描述,是抽象的、概念上的定义;而对象则是实际存在的属该类事物的具体个体,因而也称为实例(instance)。下面用一个现实生活中的例子来说明类与对象的概念。图6.1所示的是一个“汽车类”与“汽车对象”的例子。
图6.1 汽车类与汽车对象
其中,汽车设计图就是“汽车类”,由这个图纸设计出来的若干个汽车就是按照该类生产出的“汽车对象”。类是对象的模板、图纸,而对象则是类的一个实例,是实实在在的个体,一个类可以对应多个对象。如果将对象比作汽车,那么类就是汽车的设计图纸。所以面向对象程序设计思想的重点是类的设计,而不是对象的设计。
一般来说,类是由数据成员与函数成员封装而成的,其中数据成员表示类的属性,函数成员(即程序代码)表示类的行为,由此可见,类描述了对象的属性和对象的行为。下面用Java语言的类来描述圆柱体,并能保存圆柱体的信息(底半径和高),而且还能利用该类计算出圆柱体的底面积和体积。每一个圆柱体Cylinder,无论尺寸大小,都有底半径和高这两个属性,而这两个属性就是圆柱体的数据,因此就本例而言,radius(半径)与height(高)可以说是圆柱体类Cylinder的数据成员(data member)。当然,圆柱体类还可能有其他的数据,如重量、颜色等。Java语言把类内的数据成员称为field(域)。对圆柱体类而言,除了底半径和高这两个数据之外,还可以把计算底面积与体积这两个函数纳入圆柱体类里,变成类的函数成员(function member)。Java语言称这种封装于类内的函数为“方法”(method)。在传统的程序设计语言里,计算底面积与体积等相关的功能通常可交由独立的函数(function)来处理,但在面向对象程序设计(Object Oriented Programming, OOP)里,这些函数是封装在类之内的。
在Java语言里,将函数称为方法。方法可以简化程序的结构,也可以节省编写相同代码的时间,达到程序模块化的目的。其实对于方法,我们并不陌生,在前面的例子中每一个类里的main()即是方法。使用方法来编写程序时,可把特定功能的程序代码独立出来,这样可以简化代码、精简重复的程序流程。
注意 :Java语言把数据成员称为域变量、属性、成员变量等;而把函数成员称为成员方法,简称为方法。
图6.2 圆柱体类示意图
由上面的讨论可以看出,所谓的类就是把事物的数据与相关功能封装
(encapsulate)在一起,形成一种特殊的数据结构,用以表达真实事物的一种抽象。encapsulate原意是“将……装入胶囊内”,现在胶囊就是类,而成员变量与成员方法便是被封入的东西。图6.2为圆柱体类的示意图。由图6.2可知,圆柱体类的成员变量有pi、radius与height,而成员方法则有计算底面积的area()与计算体积的volume()。