谈谈自己对java访问控制的理解

之前一直没对这块深究,觉得看看就可以了,现在在去看看时,居然被卡在了protected这个控制符上了。

 

public:这个比较好理解,是完全对外开放的。

 

private:外类无法访问,只能在类的内部使用。关于这个字符修饰的字段和方法有以下两种说法

1、类对象拥有父类对象的完整拷贝. 实例化一个类是从最顶级的超类开始实例化的, 是一层一层的包裹结构. private限制访问方式只能在类的内部, 这仅仅是一个访问控制, 实际上子类对象拥有父类对象的一切.。

2、从所有的文档来看,几乎都指明private是不能被子类继承的。但是由于JAAS的存在,可以突破private的控制来访问其中的private对象,在这种情况下,发现private是已经被子类继承了。

 

这两个问题我也不太清楚吗,深究还是无果。

 

default(friendly):只能在同一包中被访问,如果子类和父类在同一包中,子类也能访问。

 

protected:这个权限属于default的超集了吧,允许其他包子类继承,但是不允许外部直接对子类的相关成员直接访问,只能在子类中访问。这也是我开始奇怪的地方。

下面是我开始的代码:

 

package Study;

public class Parent {
 
	private int i;
	int j;
	protected int m;
	public int n;

}
package Study.Study;
import Study.*;
class Child3 extends Parent{}


public class Child2 extends Parent{
 
	public static void main(String[] args) {
  
		Child3 x=new Child3();
		x.m=1;
		Child2 y=new Child2();
		y.m=2;
	}  
}



 以上代码会在x.m=1处报错,而y.m 能顺利编译,因为main方法所在的类child2是parent的子类,所以可以访问Parent的protected成员,与包无关。

x.m不可访问,是因为x是Child3的实例,main所在的类不是Child3或它的子类,所以不能访问成员m。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值