4.2 封 装 机 制 4.2.1 封装的概念 封装也称为信息隐藏,是指利用抽象数据类型将数据和基于 数据的操作封装在一起,使其构成一个不可分割的独立实体,数 据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只 保留一些对外接口使之与外部发生联系。系统的其他部分只有通 过包裹在数据外面的被授权的操作来与这个抽象数据类型交流与 交互。也就是说,用户无需知道对象内部方法的实现细节,但可 以根据对象提供的外部接口(对象名和参数)访问该对象。封装具 有下述特征: 第4章 类 与 对 象 (1) 在类的定义中设置访问对象属性(数据成员)及方法(成 员方法)的权限,限制本类对象及其他类的对象使用的范围。 (2) 提供一个接口来描述其他对象的使用方法。 (3) 其他对象不能直接修改本对象所拥有的属性和方法。 第4章 类 与 对 象 封装反映了事物的相对独立性。封装在编程上的作用是使 对象以外的部分不能随意存取对象的内部数据(属性),从而有效 地避免了外部错误对它的“交叉感染”。另一方面,当对象的内 部做了某些修改时,由于它只通过少量的接口对外提供服务, 因此大大减少了内部的修改对外部的影响。 面向对象系统的封装单位是对象,类概念本身也具有封装 的意义,因为对象的特性是由它所属的类说明来描述的。 第4章 类 与 对 象 4.2.2 类的严谨定义 在4.1.5节中,我们已经给出了定义类的一般格式,那时我 们给出的类的结构是: class 类名 { 数据成员 成员方法 } 第4章 类 与 对 象 这一结构定义只给出了定义一个类所必不可少的内容,而忽略 了类定义的许多细节。有了封装的概念后,我们就可以进一步 来学习类的严谨定义。类的严谨定义格式如下: [ 类修饰符] class 类名 [extends 父类名] [implements 接口列 表] { 数据成员 成员方法 } 第4章 类 与 对 象 可以看出,在类的严谨定义格式中,类的说明部分增加了 [类修饰符]、[extends父类名]和[implements 接口列表]三个可选 项。合理地使用这些可选项,就可以充分地展示封装、继承和 信息隐藏等面向对象的特性。由于这部分内容比较庞杂,我们 在这里做一简要说明后,将分别在此后的章节中详细讨论。 ● 类修饰符(qualifier):用于规定类的一些特殊性,主要是 说明对它的访问限制。 第4章 类 与 对 象 ● extends 父类名: 指明新定义的类是由已存在的父类派生 出来的。这样,这个新定义的类就可以继承一个已存在类——父 类的某些特征。 ● implements 接口列表: Java本来只支持单继承,为了给 多重继承的软件开发提供方便,它提供了这一接口机制。 第4章 类 与 对 象 4.2.3 类修饰符 类的修饰符用于说明对它的访问限制,一个类可以没有修 饰符,也可以有public、final、abstract等几种不同的修饰符。 它们的作用是不同的,下面分别予以介绍。 1 .无修饰符的情况 如果一个类前无修饰符,则这个类只能被同一个包里的类 使用。Java规定,同一个程序文件中的所有类都在同一个包中。 这也就是说,无修饰符的类可以被同一个程序文件中的类使 用,但不能被其他程序文件中的其他包中的类使用。 第4章 类 与 对 象 【示例程序c4_4.java】 class pp //无修饰符的类pp { int a=45; //pp类的数据成员a } public class c4_4 //公共类c4_4 { public static void main(String[ ] args) { pp p1=new pp( );//类c4_4中创建了一个无修饰符类pp的对象p1 System.out.println(p1.a); } } 第4章 类 与 对 象 在这个程序中定义了两个类:无修饰符的类pp和公共类 c4_4。它们是同一个程序文件(即同一个包)中的两个类,所 以,在类c4_4中可以创建pp类的对象p1,且对象p1可以引用类 pp的数据成员a。关于数据成员的访问限制,将在4.3节中论述。 第4章 类 与 对 象 2 .public 修饰符 如果一个类的修饰符是public ,则这个类是公共类。< |