Java是使用“访问控制符”来控制哪些细节需要封装,哪些细节是需要暴露的。Java中四种“访问控制符”说明了面向对象的封装性,所以我们要利用它们尽可能的让访问权限降到最低,从而提高安全性。
修饰符 | 同类 | 同包 | 子类 | 所有类 |
---|---|---|---|---|
private | * | |||
default | * | * | ||
protected | * | * | * | |
public | * | * | * | * |
下面归纳一下Java用于控制可见性的4个访问修饰符:同包同类中,可以自由访问protected成员
1.private 表示私有,只有自己类能访问
2.default 表示没有修饰符修饰,只有同一个包的类能访问
3.protected 表示可以被同一个包的类以及其他包中的子类访问
4.public 表示可以被该项目的所有包中的所有类访问
下面通过代码测试对Java中4种访问权限修饰符的区别做进一步的说明
首先我们创建4个类:a1
,a2
,b1
,b2
,分别比较其在本类、本包、子类、其他包的区别
代码结构:
以上可以说明 public 修饰符的访问权限为:该项目的所有包中的所有类。
只有 b1 编译不通过,说明 protected 修饰符的访问权限为:同一包中的类和不同包下的子类。
不过注意,到这儿还没完!!!
关于 protected 有两个细节需要特别强调一下:
1.若父类和子类在同一个包中,子类可访问父类的protected成员,也可访问父类对象的peotected成员。
2.若子类和父类不再同一个包中,子类可访问父类的protected成员,不能访问父类对象的protected成员。
对于初学者可能不太好理解,下面看代码就明白了
所谓默认,也就是什么都不加
由此可以说明,default 修饰符的访问权限为: 同一个包中的类
这个就不必多说了吧,private修饰符的访问权限为:同一个类