1、java中数据成员或者方法的访问权限:
此时Java有public、protect、friendly、private四种访问权限,并且这四访问权限的访问范围越来越小。
如果一个class内的数据成员或方法没有任何权限饰词,那么它的缺省访问权限就是friendly。同一个包内的其它所有类都可以访问friendly成员,但对包以外的类则形同private。
public:可以被任何class调用;
private:private成员只能在成员所属的class内被调用;
class Sundae{
private Sundae(){}//只能在Sundae class中被调用
Sundae(int i) {}
static Sundae makASundae() {
return new Sundae();
}
}
public class IceCream{
public static void main(String[] args){
// Sundae class中构造函数Sundae()是private,
// 所以不能用它进行初始化
//Sundae x = new Sundae();
Sundae y = new Sundae(1);//Sundae(int)是friendly,可以在此调用
Sundae z = Sundae.makASundae();
}
}
4. protected:具有friendly访问权限的同时,又能被subclass(当然包括子孙类,即子类的子类)所访问。即,既能被同一package中的classes访问,又能被protected成员所在class的subclass访问。
2、java中类的访问权限
java中类也有public、protect、friendly、private四种访问权限
1)public:在任何地方都可被使用
2)private:除了它自己,没有任何class可以使用,所以class不能是protected或private(inner class除外)。
3) friendly:同一个package中的classes能用
4)protected: 同一个包中的类以及其子类都可见
3、 如何调用构造函数被声明为private的class
1) 用static函数
2) 用Singteton模式
class Soup{
private Soup(){}
//(1)静态函数方法
public static Soup makeSout(){
return new Soup();
}
//(2)The "Singleton" pattern:
private static Soup ps1 = new Soup();
public static Soup access(){
return ps1;
}
public void f(String msg){
System.out.println("f(" + msg + ")");
}
}
public class Lunch{
public static void main(String[] args){
//Soup priv1 = new Soup();编译错误
Soup priv2 = Soup.makeSout();
Soup priv3 = Soup.access();
priv2.f("priv2");
priv3.f("priv3");
}