访问权限控制
访问控制(或隐藏具体实现)与“最初的实现并不恰当”有关。
重构即重写代码,以使得它更可读,更易理解,并因此而更具可维护性。
访问权限控制的等级,从大到小是:public,protected,包访问权限(没有关键词)和private。
java用关键字package将构建捆绑到一个内聚的类库单元中。
一、包:库单元
包内包含一组类,他们在单一的名字空间下被组织在一起。
import java.util.* 导入类使用的 “*”,就是提供一个管理名字空间的机制,所有类成员的名称都是彼此隔离的。
由于名字之间的潜在冲突,在java中对名称空间进行完全控制并为每个类创建唯一的标识符组合就成为了非常重要的事情。
未命名的包,被称为默认包,java包命名的规则是全部使用小写字母。java源代码文件通常被称为编译单元,每个编译单元都必须有一个后缀名 .java 该java文件中的每个类都会有一个输出文件,该输出文件名称与 .java文件中每个类的名称相同,只是多了一个后缀名 .class。
java可运行程序是一组可以打包并压缩为一个java文档文件(JAR,使用java的jar文档生成器)的.class文件。java解释器负责这些文件的查找,装载和解释。
package关键字归纳属于同一个群组的 java文件,它必须在java文件中除注释外的第一句程序代码。
package名称的第一部分是类的创建者的反顺序的Internet域名,域名是独一无二的,因此你的包名也是独一无二的。
java运行解释器运行过程如下:首先,找出环境变量CLASSPATH,CLASSPATH包含一个或多个目录,用作查找.class文件的根目录。从根目录开始,解释器获取包的名称并将每个句点替换成反斜杠,以从CLASSPATH根中产生一个路径名称(package foo.bar.baz变成foo\bar\baz或者foo/bar/baz),得到的路径会与CLASSPATH中的各个不同的项相连接,解释器就在这些目录中查找与你所要创建的类名称相关的.class文件。
二、java访问权限修饰词
public,protected,包访问权限(没有关键词)和private。每个访问权限修饰词筋控制它所修饰的特定定义的访问权
1,包访问权限
默认访问权限没有任何关键字,但通常是指包访问权限(有时也表示成为friendly)。这意味着当前的包中的所有其他类对那个成员都有访问权限,但对于这个包之外的所有类,这个成员是private。由于一个编译单元(即一个文件),只能录属于一个包,所以经由包访问权限,处于同一个编译单元中的所有类彼此之间都是自动可访问的。
2,pubilc:接口访问权限
使用关键字public,就意味着public之后紧跟着的成员生命自己对每个人都是可用的,尤其是使用类库的客户程序员更是如此。
3,private:你无法访问
关键字private意思是除了包含该成员的类之外,其他任何类都无法访问这个成员。
4,protected继承访问权限
关键字protected处理的是继承的概念,通过继承可以利用一个现有类-我们称其为基类,然后将新成员添加到该现有类中而不必碰该现有类。还可以改变该类的现有成员行为。
三、接口和实现
访问权限的控制常被称为是具体实现的隐藏,把数据和方法包装进类中,以及具体实现的隐藏,常共同被称为是封装。其结果是一个同时带有特征和行为的数据类型。
出于两个很重要的原因,访问权限控制将权限的边界划在了数据类型的内部。1,要设定客户端程序员可以使用和不可以使用的界限。2,将接口和具体实现进行分离。
四、类的访问权限
在java中,访问权限修饰词也可以用于确定库中哪些类对于该库的使用者是可用的。
每个编译单元都只能有一个public类。public类的名称必须完全与含有该编程单元的文件名相匹配,包括大小写。编译单元内完全不带public类也是可能的。
注意:类既不可以是private的也不可以说protected。所以对于类的访问权限,仅有两个选择:包访问权限或public。
五、总结
无论是在什么样的关系中,设立一些为各成员所遵守的界限始终是很重要的。
本章讨论了类是如何被构建成类库的:首先,介绍了一组类是如何被打包到一个类库中的,其次,类是如何控制对其成员的访问的。