“6.3 接口和实现”,访问权限的控制常被称为具体实现的隐藏。把数据和方法包装进类中,以及具体实现的隐藏,常共同被称作封装。访问权限控制将权限的边界划在了数据类型的内部。第一个原因是要设定客户端程序员可以使用和不可以使用的界限;第二个原因是要让程序设计者将接口和具体实现进行分离。
这一部分提到了一个很好的编程方法,也是值得我们每一个程序员借鉴的,就是把public成员放在类的开头,下面跟着protected、包访问权限和private成员的创建类的形式。这样做可以让类的使用者更好的找到自己该用的和不该用的地方在哪里。
publicclassOrganizedByAccess { publicvoidpub1() { /* ... */ } publicvoidpub2() { /* ... */ } publicvoidpub3() { /* ... */ } privatevoidpriv1() { /* ... */ } privatevoidpriv2() { /* ... */ } privatevoidpriv3() { /* ... */ } privateinti; // ... }
上面的代码还包含了{/*...*/}实现的部分,那么下一步就是将这部分实现跟前面方法的定义分离,这就达到了接口和实现分离的效果。
“6.4 类的访问权限”,这一小节的权限控制从类的方法和属性上转移到了类上的控制,其实原理和作用都是一样的。这里有一些额外的限制:
1、每个编译单元(文件)都只能有一个public类,该文件中可以包含其他的非public的类
2、public类的名称必须完全与含有该编译单元的文件名相匹配,包括大小写。
请注意,类既不可以是private,也不可以是protected的,所以对于类的访问权限,仅有两个选择:包访问权限或public。
“6.5 总结”,到现在为止整个Java中的访问权限控制就结束了,无论是在什么样的关系之中,设立一些为各成员遵守的界限始终是很重要的。当创建了一个类库,也就与该类库的用户建立了某种关系,这些用户就是客户端程序员,他们是另外的一些程序员,他们将你的类库聚合成为一个应用程序,或者运用你的类库来创建一个更大的类库。如果不指定规则,客户端程序员就可以对类的所有成员随心所欲。