Java编程思想-第6章 访问权限控制(要点)
访问控制(或隐藏具体实现)与“最初的实现并不恰当”有关。
所有优秀的作者,包括那些编写软件的程序员,都清楚其著作的某些部分直至重新创作的 时候才变得完美,有时甚至要反复重写多次。如果你把一个代码段放到了某个位置,等过一会 儿回头再看时,有可能会发现有更好的方式去实现相同的功能。这正是重构的原动力之一,重 构即重写代码,以使得它更可读、更易理解,并因此而更具可维护性°。 但是,在这种修改和完善代码的愿望之下,也存在着巨大的压力。通常总是会有一些消费 者(客户端程序员)需要你的代码在某些方面保持不变。因此你想改变代码,而他们却想让代 码保持不变。由此而产生了在面向对象设计中需要考虑的一个基本问题:“如何把变动的事物与 保持不变的事物区分开来”。
6.1 包:库单元
包内包含有一组类,它们在单一的名字空间之下被组织在了一起。
6.2 Java访问权限修饰词
public、 protected和 private这几个Java访问权限修饰词在使用时,是置于类中每个成员的定义之前的一无论它是一个域还是一个方法。每个访问权限修饰词仅控制它所修饰的特定定义的访问权。
6.3 接口和实现
访问权限的控制常被称为是具体实现的隐藏。把数据和方法包装进类中,以及具体实现的 隐藏,常共同被称作是封装°。其结果是一个同时带有特征和行为的数据类型 出于两个很重要的原因,访问权限控制将权限的边界划在了数据类型的内部。第一个原因 是要设定客户端程序员可以使用和不可以使用的界限。可以在结构中建立自己的内部机制,而 不必担心客户端程序员会偶然地将内部机制当作是他们可以使用的接口的一部分。 这个原因直接引出了第二个原因,即将接口和具体实现进行分离。如果结构是用于一组程 序之中,而客户端程序员除了可以向接口发送信息之外什么也不可以做的话,那么就可以随意 更改所有不是 public的东西(例如有包访问权限、 protected和 privatel的成员),而不会破坏客 户端代码。 为了清楚起见,可能会采用一种将 public成员置于开头,后面跟着 protected、包访问权限和 private成员的创建类的形式。这样做的好处是类的使用者可以从头读起,首先阅读对他们而言 最为重要的部分(即 public成员,因为可以从文件外部调用它们),等到遇见作为内部实现细节 的非 public成员时停止阅读。
6.4 类的访问权限
在Java中,访问权限修饰词也可以用于确定库中的哪些类对于该库的使用者是可用的。如 果希望某个类可以为某个客户端程序员所用,就可以通过把关键字 public作用于整个类的定义来 达到目的。这样做甚至可以控制客户端程序员是否能创建一个该类的对象。
6.5 总结
无论是在什么样的关系之中,设立一些为各成员所遵守的界限始终是很重要的。当创建了 一个类库,也就与该类库的用户建立了某种关系,这些用户就是客户端程序员,他们是另外 些程序员,他们将你的类库聚合成为一个应用程序,或是运用你的类库来创建一个更大的类库。 如果不制定规则,客户端程序员就可以对类的所有成员随心而为,即使你可能并不希望他 们直接复制其中的一些成员。在这种情况下,所有事物都是公开的。 本章讨论了类是如何被构建成类库的:首先,介绍了一组类是如何被打包到一个类库中 的;其次,类是如何控制对其成员的访问的。

浙公网安备 33010602011771号