Java访问控制权限
1、private:你无法访问的
只能当前类能够访问private修饰的变量或方法
2、default:包访问权限(默认default)
同一个包内的所有类都可以访问没有修饰符(即默认)的变量或方法。即当前的包中的所有其他类对那个成员都有访问权限,但对于包之外的类,却是不能访问该成员的。
取得对某成员访问权的途径有如下方式:
1. 用public修饰成员,任何人在任何地方都有访问权限
2. 不加访问权限修饰词,并将其他类放在同一包内
3. 继承,继承来的类可以访问父类的public成员和protected成员
4. 提供get和set方法,以读取和改变数值(JavaBeans的基本原理)
3、protected:继承访问权限
基类的protected成员只有派生类能够访问(同一包内的其他类也可以访问)
4、public:接口访问权限
所有的类都可以访问。对于接口来说只能使用public修饰。
5、类的访问权限
为了控制某个类的访问权限
- 修饰词必须出现于class之前(默认修饰(去掉public)为包访问控制权限)
- 每个编译单元(文件)都只能有一个public类。
- public类的名称必须与含有该编译单元的文件名相同(包括大小写)
- 编译单元内完全不带public修饰也有可能。在这种情况下可以随便对文件命名。
注意
-
类不可以是private,及protected的。只能是public或默认包访问权限。(实际上内部类可以使private或protected,但这是一个特例)
-
如果不希望其他任何人对该类有访问权限,可以把所有的构造器都指定为private,从而阻止任何人创建该类的对象。
在这种情况下可以在该类的static成员内部创建,例如:
//第一种方式
class Soup1{
private Soup1(){
}
public static Soup1 makeSoup(){
return new Soup1(); //通过静态成员创建该类的对象
}
}
//第二种方式(用到了设计模式-单例模式)
class Soup2{
private Soup2(){
}
private static Soup2 ps1 = new Soup2();
public static Soup2 acess(){
return ps1; //通过静态成员创建该类的对象
}
pubblic void f(){
}
}