关于Java的访问控制修饰符

很多书上对于访问控制修饰符都是如下描述的:


公开级别:用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 访问。


以上是学习访问控制修饰符的一些收获,有不对的地方希望指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值