暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
JAVA第5章 隐藏实施过程.pdf
249
22页
0次
2021-02-22
50墨值下载
5 隐藏实施过程
“进行面向对象的设计时,一项基本的考虑是:如何将发生变化的东西与保
持不变的东西分隔开。
这一点对于库来说是特别重要的。那个库的用户(客户程序员)必须能依赖
自己使用的那一部分,并知道一旦新版本的库出台,自己不需要改写代码。而与
此相反,库的创建者必须能自由地进行修改与改进,同时保证客户程序员代码不
会受到那些变动的影响。
为达到这个目的,需遵守一定的约定或规则。例如,库程序员在修改库内的
一个类时,必须保证不删除已有的方法,因为那样做会造成客户程序员代码出现
断点。然而,相反的情况却是令人痛苦的。对于一个数据成员,库的创建者怎样
才能知道哪些数据成员已受到客户程序员的访问呢?若方法属于某个类唯一的
一部分,而且并不一定由客户程序员直接使用,那么这种痛苦的情况同样是真实
的。如果库的创建者想删除一种旧有的实施方案,并置入新代码,此时又该怎么
办呢?对那些成员进行的任何改动都可能中断客户程序员的代码。所以库创建者
处在一个尴尬的境地,似乎根本动弹不得。
为解决这个问题,Java 推出了“访问指示符”的概念,允许库创建者声明哪
些东西是客户程序员可以使用的,哪些是不可使用的。这种访问控制的级别在“最
大访问”“最小访问”的范围之间,分别包括:public,“友好的”(无关键字)
protected 以及 private。根据前一段的描述,大家或许已总结出作为一名库设
计者,应将所有东西都尽可能保持为“private
(私有)并只展示出那些想
客户程序员使用的方法。这种思路是完全正确的,尽管它有点儿违背那些用其他
语言(特别是 C)编程的人的直觉,那些人习惯于在没有任何限制的情况下访问
所有东西。到这一章结束时,大家应该可以深刻体会到 Java 访问控制的价值。
然而,组件库以及控制谁能访问那个库的组件的概念现在仍不是完整的。
存在这样一个问题:如何将组件绑定到单独一个统一的库单元里。这是通过 Java
package(打包)关键字来实现的,而且访问指示符要受到类在相同的包还是
在不同的包里的影响。所以在本章的开头,大家首先要学习库组件如何置入包里。
这样才能理解访问指示符的完整含义。
5.1 包:库单元
我们用 import 关键字导入一个完整的库时,就会获得“包”(Package)
如:
import java.util.*;
它的作用是导入完整的实用工具(Utility)库,该库属于标准 Java 开发工
Vector 位于 java.util
java.util.Vector
省略 import 么简个“Vector
(因为 import 是默认的)
若想导入单独一个类,可在 import 语句里指定那个类的名字:
import java.util.Vector;
现在,我们可以自由地使用 Vector。然而,java.util 中的其他任何类仍是
不可使用的。
之所以要进行这样的导入,是为了提供一种特殊的机制,以便管理“命名空
间”Name Space)。我们所有类成员的名字相互间都会隔离起来。位于类 A 内的
一个方法 f()不会与位于类 B 内的、拥有相同“签名”(自变量列表) f()发生
冲突。但类名会不会冲突呢?假设创建一个 stack 类,将它安装到已有一个 stack
类(由其他人编写)的机器上,这时会出现什么情况呢?对于因特网中 Java
应用,这种情况会在用户毫不知晓的时候发生因为类会在运行一个 Java 程序
的时候自动下载。
正是由于存在名字潜在的冲突,所以特别有必要 Java 的命名空间进行
完整的控制,而且需要创建一个完全独一无二的名字,无论因特网存在什么样的
限制。
迄今为止,本书的大多数例子都仅存在于单个文件中,而且设计成局部(本
地)使用,没有同包名发生冲突(在这种情况下,类名置于“默认包”内)。这
是一种有效的做法,而且考虑到问题的简化,本书剩下的部分也将尽可能地采用
它。然而,若计划创建一个“对因特网友好”或者说“适合在因特网使用”的程
序,必须考虑如何防止类名的重复。
Java 创建一个源码文件的时候,它通常叫作一个“编辑单元(有时也叫
“翻译单元”每个编译单元都必须有一个以.java 结尾的名字。而且在编译
单元的内部,可以有一个公共(public)它必须拥有与文件相同的名字(包
括大小写形式,但排除.java 文件扩展名)。如果不这样做,编译器就会报告出
错。每个编译单元内都只能有一个 public (同样地,否则编译器会报告出错)
那个编译单元剩下的类(如果有的话)可在那个包外面的世界面前隐藏起来,
为它们并非“公共”的(非 public)而且它们由用于主 public 类的“支撑”
类组成。
.java 们会件;
于.java 文件中的每个类,它们都有一个.class 扩展名。因此,我们最终从少量
of 22
50墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜