java中访问权限控制修饰词包括了:public protected private 和默认(包访问修饰权限),值得一提的是protected也同时提供了包访问权限,也就是说相同包内的其他元素也可以访问protected元素;然而,如果一个子类继承了父类,子类就具有了父类继承而来的protected方法或者field,但与该子类位于同一包下的其他元素并不具有访问权限。
其中值得注意的是对于类class的访问权限只能使用 包访问权限和public 进行修饰(然而如果为内部类可以使用private或protected进行修饰),如果想要一个类为private,不想让其他类直接访问呢,此时需要将该类的构造方法定义为private类型的,同时该类可以被其内部的static成员创建。
通过上面提出的思想,可以实现我们常说的“单例模式”:
定义一个单例类:
public class Singleton {
private static String information;
private static Singleton s = new Singleton(information);
public static Singleton getSingleton(String information){
Singleton.information = information;
return s;
}
public void info(){
System.out.println(information);
}
private Singleton(String information){
Singleton.information = information;
}
}
测试一下:
public class SingletonTest {
public static void main(String[] args) {
Singleton single1 = Singleton.getSingleton("单例测试");
single1.info();
Singleton single2 = Singleton.getSingleton("单例测试??");
single2.info();
System.out.println(single1 == single2);
}
}
输出:
单例测试
单例测试??
true
可是看出single1与single2实际为同一个实例。