访问权限控制:指的是本类及本类内部的成员(成员变量、成员方法、内部类)对其他类的可见性,即这些内容是否允许其他类访问。
| 访问权限 | 本类 | 本包的类 | 子类 | 非子类的外包类 |
|---|---|---|---|---|
| public | 是 | 是 | 是 | 是 |
| protected | 是 | 是 | 是 | 否 |
| default | 是 | 是 | 否 | 否 |
| private | 是 | 否 | 否 | 否 |
由此可见,访问权限大小:public > protected > default(包访问权限) > private。
1)public:所修饰的类、变量、方法,在内外包均具有访问权限。
2)protected:这种权限是为继承而设计的,protected所修饰的成员,对所有子类是可访问的,但只对同包的类是可访问的,对外包的非子类是不可以访问的。
3)包访问权限(default):只对同包的类具有访问的权限,外包的所有类都不能访问。
4)private:私有的权限,只对本类的方法可以使用。
注意:当某个成员能被所有的子类继承,但不能被外包的非子类访问,就是用protected;
当某个成员的访问权限只对同包的类开放,包括不能让外包的类继承这个成员,就用包访问权限。
访问权限控制的使用场景
1)外部类的访问控制
外部类(外部接口)是相对内部类(也称为嵌套类)、内部接口而言的。外部类的访问控制只能是这两种:public、default。
2)类里面的成员的访问控制
类里面的成员分为三类:成员变量、成员方法、成员内部类(内部接口)
类里面的成员的访问控制可以是四种,也就是可以使用所有的访问控制权限。
3)抽象方法的访问权限
普通方法是可以使用四种访问权限的,但是抽象方法是有一个限制:不能使用private来修饰,即抽象方法不能是私有的,否则,子类就无法继承实现抽象方法。
4)接口成员的访问权限
接口由于其特殊性,所有成员的访问权限都规定的死死的。
- 变量:public static final
- 抽象方法:public abstract
- 静态方法:public static
- 内部类、内部接口:public static
5)构造器的访问权限
构造器的访问权限可以是以上四种权限中的任意一种:
1、采用 private:一般是不允许直接构造这个类的对象,再结合工厂方法(static方法),实现单例模式。注意:所有子类都不能继承它。
2、采用包访问控制:比较少用,这个类的对象只能在本包中使用,但是如果这个类有static 成员,那么这个类还是可以在外包使用;(也许可以用于该类的外包单例模式)。
注意:外包的类不能继承这个类;
3、采用 protected :就是为了能让所有子类继承这个类,但是外包的非子类不能访问这个类;
4、采用 public :对于内外包的所有类都是可访问的;
posted on
浙公网安备 33010602011771号