在Java中,访问权限修饰词也可以用于确定库中的哪些类对于该库的使用者是可用的,类既不可以是private也不可以是protected的,对于类的访问权限,只有两种选择:包访问权限或者public。下面是一个例子:
1 class soup1{ 2 private soup1(){} 3 public static soup1 makesoup(){ 4 return new soup1(); 5 } 6 } 7 8 class soup2{ 9 private soup2(){} 10 private static soup2 ps1 = new soup2(); 11 public static soup2 access(){ 12 return ps1; 13 } 14 public void f(){} 15 } 16 17 public class lunch { 18 void testPrivate(){ 19 //soup1 s = new soup1(); 20 } 21 void testStatic(){ 22 soup1 s = soup1.makesoup(); 23 } 24 void testSingleton(){ 25 soup2.access().f(); 26 } 27 }
由于在Java中,如果没有编写构造器,编译器会帮你创建一个,而如果我们编写了自己默认的构造器,那么不会自动创建,所以可以像上面一样,通过将构造器指定为private的来阻止直接创建这个类的实例。除此之外,上面的例子还给出了两种选择,别人要如何使用这个类呢?在soup1中,创建一个static方法,会返回一个引用,并且可以对引用的数目进行计数。在soup2中,使用到了单例的模式,因为使用者始终只能创建一个soup2对象。
对于soup1和soup2,如果没能为类访问权限提供一个修饰符,那么就会默认得到包访问权限,这意味着包外的类无法使用这个类,但是可以调用这个类static域的成员,如果这个成员是public的话。