第6章 访问权限控制

访问权限控制的等级,以最大权限到最小权限依次为:public,protected,包访问权限(没有关键字)和private.

1. 包 : 库单元

如我们使用java.util中的一个叫做ArrayList的类.那么我们则要:

1
2
3
4
5
public class FullQualificaction{
public static void main(String[] args){
java.util.ArrayList list = new java.util.ArrayList();
}
}

如果我们导入包import则不用.

1
import java.util.*;

1.1 代码组织

package和import关键字允许你做的,是将单一的全局名字空间分割开,使得无论多少人使用Internet以及Java开始编写类,都不会出现名称冲突的问题.

1.2 创建独一无二的包名

Java解释器的运行过程如下:首先,找出环境变量CLASSPATH,得到的路径会与CLASSPATH中的各个不同的项相连接,解释器就在这些目录中查找与你所有创建的类名称相关的.class文件.

1.3 定制工具库

1
2
3
4
5
6
7
8
9
10
11
12
class Print{
public static void print(Object object){
System.out.println(object);
}
}
public class PrintTest {
public static void main(String[] args) {
Print.print("hello");
}
}

2. Java访问权限修饰词

  • 使该成员成为public,无论谁,无论哪里,都可以访问该成员.
  • 继承而来的类既可以访问public成员也可以访问protected成员(但访问不了private成员).
  • 提供访问器(accessor)和变异器(mutaror)方法,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package debug;
public class SoupTest {
public static void main(String[] args) {
for(int i =1;i<10;i++){
System.out.println(Soup.newSoup());
}
}
}
class Soup{
private static Soup s = new Soup();
private Soup(){
}
public static Soup newSoup(){
return s;
}
public void play(){
System.out.println("good!!!");
}
}

3. 总结

  • 为了使用户不用碰上那些不该碰到的部分,这些部分对于类内部的操作是必要的.
  • 为了让类库设计者可以更改类的内部工作方式,而不必担心这样会对客户端程序员产生重大的影响.