对访问权限控制的理解——读自Thinking in Java
访问权限控制使用是在类构建成类库的过程中,一般这种构建过程都是由开发者完成的,在经由客户端程序员聚合成为应用程序。这是访问权限控制引用的总前提。
在类到类库的过程中又分为两个基本的问题,第一,类是如何打包成类库的;第二,类是如何控制成员权限的。第一点是第二点 运用的基础,在类中合理使用访问权限控制再打包成类库,这才是一个程序员要做到的完美状态。
我们首先来谈谈第一点,类是如何打包成类库的,要解决这个问题。首先我们需要知道什么是类,什么是类库,它们的区别在什么?很显然类库就是类的集合,那么这个集合是如何实现的呢,这里我们引入了“包”的概念,关键词:package,包是库的单元,包内包含有一组类,他们在单一的名字空间下被组织在一起,从而形成了类的集合,也就是类库。
package与import的引入还可以很好的解决两个问题:怎样创建独一无二的名称以及怎样查找有可能隐藏于目录结构中某处的类。这些问题的解决都依赖与.class文件所在路径的位置也就是package的名称来实现的。按照一贯的做法是将Internet域名反过来写,因为每个人的Internet域名是不同的。而怎样查找有可能隐藏于目录结构中某处的类,这就需要我们去配置环境变量CLASSPATH,环境变量CLASSPATH可以设置为包含多个可供选择的查询路径。
我们回到之前第二个问题,类是如何控制成员权限的。为解决这个问题,我们需要了解访问权限控制的由来,权限的使用最初是为了让编写该类的程序员反复完善最初的代码(可以修改的地方),对类库进行升级,而不破坏客户端程序员的代码而引出了权限控制这一功能。
通俗的来说原因就两点:第一,对客户端程序员来说就是,那些我可以直接使用,那些我不能直接使用。第二,对库的开发者来说,我可以随意修改我设置权限的部分代码,而不会影响其他人的代码。
Java访问权限修饰词有四种:public、protected、private、默认访问权限(不填)。
需要特别注意的是private关键词。如果不希望其他任何人对该类拥有访问权限,可以把所有的构造器都指定为private,从而组织任何人创建该类的对象,但有一个是例外的,通过静态方法调用同时返回一个该对象的引用。
访问权限控制专注于类库的开发者和外部使用者的关系,这是一种方式。但大多数情况下,都是自己编写了全部的代码,或者一个小组聚在一起开发一个项目,所有的东西放在一个包内,在这种情况下,严格遵守访问权限控制并不是简便的方案。