1.1.2 如何创建类
1.抽象出类
要用Java来描述一个类,首先得将该类的属性和方法在头脑中清楚地抽象出来。如我们定义一个人类,以图1-1进行说明。
图1-1 人类类图
【思考】请画出苹果类的类图、猫的类图。
是不是感觉到在软件开发中,你就是一个个类的创造者,是你创造了一个个的规则进行了分类,在内存中的世界里你就是造物主。
2.用Java语法构建出类
Java中类定义语句的形式为:
class 类名 { // 类头的定义 /* 类体的定义*/ 成员变量声明; 成员方法定义; }
其中,class是Java语言中定义类时必须使用的关键字,以告诉Java这是一个类。“类名”是为这个类取的名,应书写为Java语言合法的标识符。大括号{}中是定义类体的地方,其中包含该类中的数据成员和成员方法。在Java语言中也允许定义没有任何成员的空类或只有属性或方法二者存一的类。
前面分析出了一个“人”类,下面借用“人”类的例子来说明在Java语言中如何定义一个人类,其描述形式为:
class 人类 {// 定义一个人类 /*人类的属性*/ 眼睛; 鼻子; 手; 名字; …… /*人类的成员方法定义*/ 吃饭( ); 走路( ); 说话( ); …… }
【例1-1】 定义一个名为Round的圆形类,其有半径属性、有求周长的方法。
解:
(1)定义类头
class Round{ }
编码规范提示:
按照类名的书写规范,类名不允许用中文,其首字母应大写,若类名由多个单词组成,则每个单词的首字母均要大写。如:class TestDemo{…}
(2)定义成员变量
在类中定义的方法和变量统称为类的成员。定义在类中但在类方法之外的变量称为成员变量。Java中成员变量的声明形式如下:
[修饰符] 成员变量数据类型 成员变量名 [= 初值];
上面定义了类头,类体是空的,就需要添加类的成员属性表示圆形的状态。代码如下:
class Round{ // 定义成员属性 double radius; // 半径 }
从这个例子可以看到,在类中进行成员变量的声明与一般变量的声明形式完全相同。成员变量的类型可以是基本数据类型,也可以是自定义类型,比如为某个类的对象。
编码规范提示:
成员变量名,第一个单词的第一个字母小写,其后的单词第一个字母大写,而且单词之间没有任何分隔符。单词的选用要求能体现该属性的特定含义,成员变量名在一个类中还要保证唯一性。
(3)定义成员方法
定义在类中的方法称为成员方法。Java中成员方法的定义形式如下:
[修饰符] 返回类型 方法名([形式参数列表]){
// 方法体
}
class Round { // 定义成员属性 double radius; // 半径 // 定义成员方法 double perimeter(){ // 求圆形的周长 return 2*3.14*radius; } }
工作分解-操作方案
1.从功能需求中分析并抽象出类,作出类图;
2.按照类图将对应的类的结构构建出来;
3.实现出类中的方法。
工作实施
1.分析抽象出类
类的内部包括属性和方法两种成员。按照属性是名词,而方法是动词的原则,我们不难从本任务中分析抽象出有一个矩形类Rectangle,它包含两个表示长方形属性的成员变量:长length和宽width,以及两个表示长方形行为的成员方法:perimeter()和area()方法分别用于计算长方形的周长和面积。
类图(Class Diagram)是用来描述类内在结构的图,是面向对象系统建模中最常用的图。在UML中,类用矩形来表示,并且该矩形被划分为3个部分:名称部分、属性部分和方法部分。其中,名称部分存放类的名称,中间的部分存放类的属性名、属性的类型及值信息,底部的部分存放类的操作、操作的参数表和返回类型信息,如图1-2所示。
图1-2 矩形类图
名词解释:
UML(Unified Modeling Language),即统一建模语言,它是国际对象管理组织OMG制定的一个通用的、可视化建模语言标准,用图表的方式将要设计的软件问题建模,将问题分解化,适合于其他开发者阅读。类图是UML中应用最广泛的一种图,描述拟建系统各个层面的静态结构,主要用于表述类、接口和子系统之间的关系。
2.按照类图编制出类框架
class Rectangle{ // 定义成员变量 double length; // 长 double width; // 宽 // 定义成员方法 double perimeter(){ // 求长方形的周长 } double area(){ // 求长方形的面积 } }
3.实现类中的方法
double perimeter(){ // 求长方形的周长 return 2*(length + width); } double area(){ // 求长方形的面积 return length*width; }
4.完整源代码如下
class Rectangle{ // 定义成员变量 double length; // 长 double width; // 宽 // 定义成员方法 double perimeter(){ // 求长方形的周长 return 2*(length + width); } double area(){ // 求长方形的面积 return length*width; } }
【思考】试分析“学生”这个类,然后用Java语言来定义一个学生类Student,其有姓名、年龄、性别、身高、专业等属性,以及有回答提问、考试等行为。