8.2 类
类(class)是Java语言的最小编程单位,也是设计和实现Java程序的基础,本部分将深入介绍类的相关知识。
8.2.1 类的概念
类是一组事物共有特征和功能的描述。类是对于一组事物的总体描述,是按照面向对象技术进行设计时最小的单位,也是组成项目的最基本的模块。
类的概念是抽象的,类似于建筑设计中的图纸,是对于现实需要代表的具体内容的抽象。类只包含框架结构,而不包含具体的数据。所以类代表的是总体,而不代表某个特定的个体。
例如设计电脑(computer)这个类,电脑是一组事物,则该类中包含的常见特征如下:
l 类型:笔记本或台式机
l 内存容量
l 硬盘容量
l CPU类型
l 屏幕尺寸
l 主板类型
对于每一台具体的电脑来说,每个特征都有自己具体的数值,或者说是将特征数据具体化,而类需要代表的是总体特征,只需要具备特征的类型和结构,不需要具有具体的数值,因为一般一组事物的某个特征的数值都是不尽相同的,但是都统一的具备该特征。
同理,如果设计登录模块中的用户(user)类,则该类中包含的常见特征如下:
l 用户名
l 密码
对于每个具体的用户来说,都有自己特定的用户名和密码,但是对于用户这个类来说,只需要具备用户名和密码这两个特征的类型和结构即可。从这里也可以很直观的体会到,类是抽象的,是一组事物共有特征的描述。
上面是对于类结构具体特征的描述,其实类中除了包含特征的描述以外,还可以包含该类事物共有的功能,这些功能也是类的核心内容。
例如电脑这个类,包含的基本功能有:
l 打开
l 关闭
用户这个类,包含的基本功能有:
l 登录
通过在类的内部包含共有的功能,使得每个类都可以在内部实现一些规定的功能,从而减少和外部的交互,降低整个项目的复杂度。
这就是面向对象技术中类的概念的基本描述,每个类就代表一组事物,通过基本的特征和功能实现该类事物在项目内部的表达。
以 上是从设计角度理解类的概念,其实从语法角度理解类的概念也很简单,类就是一种复合数据类型,或者说是一种程序员设计的新类型。因为在实际开发中,程序员 可以根据需要声明新的类,所以在面向对象的开发中,程序员可以根据需要设计新的数据类型——类,从而实现项目要求的功能。
把设计角度中类的概念,转换为语法角度类的概念,是每个面向对象技术初学者都必须经历的阶段,通过进行该转换,可以把虚拟的类的概念转换成具体的类的概念,也是面向对象技术入门的标志。
对于一组事物来说,共有的特征和功能有很多,在实际抽象成类时,只需要抽象出实际项目中的需要的属性和功能即可。
8.2.2 类的声明
类是一种复合数据类型,则声明一个类就相当于创建了一种新的数据类型,在面向对象技术中就通过不断的创建新的数据类型来增强程序可以代表的数据的能力。
类声明总体的语法格式如下:
访问控制符 [修饰符] class 类名{
[属性声明]
[方法声明]
[构造方法声明]
}
说明:该语法格式中中括号内部的部分为可选。
其中访问控制符用于限定声明的类在多大范围内可以被其它的类访问,主要有默认访问控制符(无关键字)和public;修饰符用于增强类的功能,使声明的类具备某种特定的能力;class是声明类时使用的关键字;类名是一个标识符,用于作为新声明的类的名称,要求必须符合标识符的命名规范。注:在Java语言的编码规范中,类名第一个字母要求大写。
例如如下示例:
public class Computer{}
class User{}
接着的大括号内部用于声明类的内部结构,类内部一般包括三类声明,且这三类声明都是可选的。说明如下:
l 属性声明
用于代表共有特征
l 方法声明
用于代码共有功能
l 构造方法声明
用于初始化类的变量
下面是这些声明的详细说明。
8.2.2.1 属性声明
属性,有些翻译为域、字段等,属性是类内部代表共有特征的结构,或者可以把属性理解为类的某个具体特征,类通过一系列的属性来代表一种新的数据类型。对于类比较基础的理解就是通过多个属性组合成的新的数据类型,这也是复合数据类型的由来。
属性声明的语法格式如下:
访问控制符 [修饰符] 数据类型 属性名[=值];
属性的访问控制符限定该属性被访问的范围,包含如下四种:public、protected、默认的(无关键字)和private,分别代表不同的访问限制,具体的限制范围后续将有详细说明。
修饰符用于使属性具备某种特定的功能。
数据类型为该属性的类型,可以是Java语言中的任意数据类型,也就是说,既可以是基本数据类型也可以是复合数据类型。
属性名是一个标识符,用于代表该属性的名称,在声明属性时的同时可以为该属性进行赋值。
示例格式为:
public int cpuType;
public char sex = ‘男’;
在实际声明属性时,也可以一次声明多个属性,例如:
public int x = 10, y = 20;
不过为了程序结构的清晰,一般书写为如下格式:
public int x = 10;
public int y = 20;
另外,属性的作用范围是类的内部,可以在类内部的任何位置引用属性,包括在方法和构造方法的内部,而不论属性是否声明在方法的上面。
总得来说,类就是通过一系列属性的组合成为一种新的数据类型,从而可以代表一种更复杂的结构,也相当于为程序员提供了一种组合已有数据类型形成新数据类型的方法,从而更直观的去代表代表需要表达的数据。
8.2.2.2 方法声明
方法在类的内部代表该类具有的共有功能,将这些功能以方法的形式放置在类的内部,可以在需要时进行调用。
方法的声明和前面讲解的方法一致,只是在类内部增加了属性以后,可以在方法内部直接进行访问,而不需要进行参数传递了。
关于方法的声明示例如下:
public class Box{
int width;
int height;
int length;
public int vol(){
return width * height * length;
}
}
在该示例中,声明了一个名字为Box的类,假设使用这个类来代表箱子,其中包含三个属性:length、width和height,依次代表箱子的长宽高,则在该类内部包含一个基本的功能,求箱子体积的vol方法,该方法的功能是计算箱子的体积。
下面是关于上面提到的用户类的基本实现,示例代码如下:
public class User{
public String username;
public String password;
public boolean login(){
逻辑代码
}
}
在User类的内部,包含用户名和密码这两个属性,根据需要选择Java语言提供的String字符串类型进行代表,然后在该类的内部声明登录的login方法,在方法内部根据逻辑书写对应的实现代码。