关键字 private 的意思是,除了包含该成员的类之外,其他任何类都是无法访问这个成员
的。由于处于同一个包内的其他类是不可以访问 private 成员的,因此这等于说是自己隔
离了自己。从另一方面说,让许多人共同合作来创建一个包也是不大可能的,为此 private
就允许你随意改变该成员,而不必考虑这样做是否会影响到包内其他的类。
缺省的包访问权限通常已经提供了充足的隐藏措施。请记住,使用类的客户端程序员是无法
访问包访问权限成员的。这样做很好,因为缺省访问权限是一种我们经常使用的权限,同时
也是一种在你忘记添加任何访问权限控制时能够自动得到的权限。因此,你通常会考虑哪些
成员是想要明确公开给客户端程序员使用的,从而将它们声明为 public,而在最初,你可
能不会认为你会需要使用关键字 private,因为没有它,照样可以工作。(这在 C++之中
是截然相反的。)然而,事实很快就会证明,对 private 的使用是多么的重要,在多线程
环境(multithreading)下更是如此。(正如你在第 13 章中将会看到的一样。)
此处有一个使用private 的示例。
//:c05:IceCream.java
//Demonstrates "private" keyword.
class Sundae {
private Sundae() {}
static SundaemakeASundae() {
return new Sundae();
}
}
public class IceCream {
public staticvoid main(String[]args) {
//! Sundae x =new Sundae();
Sundae x = Sundae.makeASundae();
}
} ///:~
这是一个说明private终有其用的示例:你可能想要控制如何去创建对象,并阻止别人直接
访问某个特定的构造器(或是全部构造器)。在上面的例子中,你不能通过构造器来创建
Sundae对象,而必须调用makeASundae( )方法来达到此目的。3
任何你确认为只是该类的一个“助手”方法的方法,你都可以把它指定为 private,以确保
你不会在包内的其他地方误用到它,于是也就防止了你会去改变或是删除这个方法。将方法
指定为 private 确保了你拥有这种选择权。
这对于类中的private 域同样适用。除非你必须公开底层实现细目(此种境况很少见),
否则你就应该将所有的域指定为 private。然而,不能因为在类中某个对象的引用是
private,就认为其他的对象无法拥有该对象的 public 引用。(参见附录 A 中关于别名
机制的讨论)。