您的位置:首页 > 编程语言 > Java开发

关于Java的访问控制修饰符

2014-10-16 21:13 344 查看
很多书上对于访问控制修饰符都是如下描述的:

公开级别:用public修饰,对外公开。

受保护级别:用protected修饰,向子类及同一个包中的类公开。

默认级别:没有访问修饰符,向同一个包中的类公开。

私有级别:用private修饰,只有类本身可以访问,不对外公开。

但是在我自己测试的时候出了问题,发现默认类型的变量也能被子类访问,一开始以为是书出了问题,后来查找资料并且试验后发现了其实是这样的:

默认级别修饰的变量或者函数确实可以被同包的子类访问,但是不在一个包的就不可以了,这也是和protected 的一个区别吧,protected类型的变量,不管子类在哪里都可以访问父类的。

以下例子摘自《Java面向对象编程》,孙卫琴的,有书的可以直接看196页。

ClassA 和 ClassB 位于同一个包中,ClassC 和 ClassD 位于另一个包中,并且ClassC 是 ClassA 的子类,ClassA 是 public 类型, 在ClassA 中定义了 4 个成员变量: var1,var2, var3, 和 var4 ,它们分别处于4个访问级别。

public int var1;
protected int var2;
int var3;
private var4;


然后访问的情况:
在ClassA 中,可以访问自身的var1,var2, var3, 和 var4变量。
在ClassB 中,可以访问ClassA中的var1,var2, var3变量。
在ClassC 中,可以访问ClassA中的var1,var2变量。
在ClassD 中,可以访问ClassA中的var1变量。

与此同时,ClassB 是默认访问级别,和A在同一个包中,所以只能被同一个包中的ClassA 访问,但不能被另一个包中的ClassC和ClassD 访问。

以上是学习访问控制修饰符的一些收获,有不对的地方希望指正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: