Java有四种访问权限,其中三种有访问权限修饰符,分别为private,public和protected,还有一种不带任何修饰符Default。
private:一般称之为“私有的”,被其修饰的内部类属性、方法只能被该类访问,其他任何类均没有权限访问;
default:默认访问权限(有时也称为friendly),被其修饰的外部类、属性、方法只能在同一个包中访问;
protected:被其修饰内部类、属性、方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问;
public:一般称之为“公有的”,被其修饰的外部类、属性、方法能被所有的类访问;
修饰符 | 同一个类 | 同一个包 | 不同包的子类 | 不同包非子类 |
---|---|---|---|---|
Privte | √ | × | × | × |
Default | √ | √ | × | × |
Protected | √ | √ | √ | × |
Public | √ | √ | √ | √ |
注意:java的访问控制是停留在编译层的,也就是它不会在.class文件中留下任何的痕迹,只在编译的时候进行访问控制的检查。其实,通过反射的手段,是可以访问任何包下任何类中的成员,例如,访问类的私有成员也是可能的。
1、类访问权限
对于外部类的访问权限,仅能有两种选择:包访问权限或public;
包访问权限:用来修饰外部类时,表示该类只对同一包的所有类可见;
public:用户修饰外部类是,表示该类对所有其他的类都可见;
内部类可以用private和protected修饰;
补充:
- 一个文件只能有一个public类
- public类的名称必须与该文件名完全相同
- 如果文件中不包含public类,则文件可以随意命名
2、类成员方法访问权限
类成员、方法可以用4中访问修饰符修饰;
默认访问权限(包访问权限):如果一个类的方法或变量被包访问权限修饰,也就意味着只能在同一个包中的其他类中显示地调用该类的方法或者变量,在不同包中的类中不能显示地调用该类的方法或变量。
private:如果一个类的方法或者变量被private修饰,那么这个类的方法或者变量只能在该类本身中被访问,在类外以及其他类中都不能显示地进行访问。
protected:如果一个类的方法或者变量被protected修饰,对于同一个包的类,这个类的方法或变量是可以被访问的。对于不同包的类,只有继承于该类的类才可以访问到该类的方法或者变量。
public:被public修饰的方法或者变量,在任何地方都是可见的。