public:

public申明的成员声明适用于所有人，特别是适用于使用库的客户程序员。假定我们定义了一个名为test的包,其中包含下述类组件:

//: people.java

package 4-4.test;

public class people {

public people() {

System.out.println("people constructor");

}

void sleep() {

System.out.println("foo");

}

}

·现在我们定义一个程序来使用类people:

//:house.java

import 4-4.test.*;

public class house{

public house() {

System.out.println("house constructor");

}

public static void main(String[] args) {

people p = new people();

//! p.sleep(); // Can't access

}

}

·友好的

现在我们把上面的house.java文件修改一下，把import改成“package 4-4.test;”

我们会惊奇的发现p.sleep()方法可以使用了。这个便是“友好的”访问权限：如果不指定访问指示符，它通常称为“友好”（Friendly）访问。这意味着当前包内的其他所有类都能访问“友好的”成员，但对包外的所有类来说，这些成员却是“私有”（Private）的，外界不得访问。由于一个编译单元（一个文件）只能从属于单个包，所以单个编译单元内的所有类相互间都是自动“友好”的。因此，我们也说友好元素拥有“包访问”权限。

·protected

从英文翻译来看，protected的意思即为：受到保护的。protected关键字为我们引入了一种名为“继承”的概念，这个将在会后面讲到。它以现有的类为基础，并在其中加入新的成员，同时不会对现有的类产生影响--我们将这种现有的类称为“基础类”。亦可改变那个类现有成员的行为。对于从一个现有类的继承，我们说自己的新类“扩展”（extends）了那个现有的类。

若新建一个包的类，并从另一个包内的某个类里继承，则唯一能够访问的成员就是原来那个包的public成员。当然，如果在相同的包里进行继承，那么继承获得的包能够访问所有“友好”的成员。

如果我们想在这个新建的包里面的类访问另外一个包里面的友好的成员（因为他是友好的，并不是不可接触（private）,所以肯定有用得着的地方）这个时候protected就派上了用途。

若往回引用“public”的那个people.java文件，则下面这样就能访问“友好”的成员：

//: people.java

package 4-4.test;

public class people {

public people() {

System.out.println("people constructor");

}

protected void sleep() {

System.out.println("sleep");

}

}

import 4-4.test.*;

public class police　extends people{

public police() {

System.out.println("police　constructor");

}

public static void main(String[] args) {

police p = new police();

p.sleep(); // ok, Can access it!

}

}

private

private关键字意味着除非那个特定的类，而且从那个类的方法里，否则没有人能访问那个成员.这个将不再多说。

【练习】

package mypackage;

public class A{

private void Pri(){

System.out.println("private");

}

protected void Pro(){

System.out.println("protected ");

}

public void Pub(){

System.out.println("public ");

}

void fri(){

System.out.println("friend");

}

}

package mypackage;

public class test{

public static void main(String[] args){

A a1 = new A();

a1.Pri();

a1.Pro();

a1.Pub();

a1.fri();

}

}