java中的访问控制权限
一、包:库单元
一个java源代码文件 相当于 一个编译单元 相当于 xxx.java 相当于 有且仅有1个public类与活干其他类组成,public类名与文件名相同。
写package的作用就相当于一个目录,把类都归结到一个目录下,这样就能避免不同功能相同类名的两个类冲突。编译时,解释器就会在特定包下找特定类。
- 包的命名:
- 第一部分:按照类的创建者的反顺序的Internet域名。
- 第二部分:分解成机器上的一个目录
- 解释器运行如下:
- 找出环境变量CLASSPATH,它包含一个或多个目录,用作查找.class文件的根目录,也就是指定编译起始目录。
- 从根目录开始,解释器获取包的名称,并把每个.变为FILE.SAPERATER,从CLASSPATH根中产生一个路径。
- 得到的路径会跟CLASSPATH的各个不同项相连接,解释器就在这些目录中查找相应的类。
- 如果发生冲突:
- 同一个编译单元里用到了两个不同包下的同名的类时,可以通过指定全名的方式解决( java.util.Vector v = new java.util.Vector() )
二、访问权限
- 成员访问权限
- 默认:不声明的话,就是包访问权限,同一个包下的可以访问,包外的无法访问。
- public:都可以访问。
- protected:继承访问权限,它的子类可以访问;同时也是包访问权限,同一个包内的可以访问。
- private:类外无法访问。
- 类访问权限
- public:
- 包访问权限:此时最好将该类的域声明为private才有意义。
注:类访问权限不能是private的,如果不希望任何其他访问该类,可以将此类的构造器定义为private,不让其他可以定义该类的对象!
protected也不行!
- 如果一个类的构造器是private
可以在这个类里在定义一个 public static 类名 的方法,在方法里调用构造器返回这个类的对象引用 (return new leiming())。然后在类外,调用这个方法来建立该类的对象引用。
详见<Thinking in java> P110 : 6.1 包:库单元