Java访问权限范围

       学了Java也有几年了,可是今天突然发现自己居然还是没弄清Java最最基本的访问权限问题:public(公开的)、protected(受保护的)、private(私有的)、friendly(即不写,默认情况下的)

      首先这是我在百度以后得到的比较好的讲解文章,大家感兴趣的可以去看看!!!

http://www.cnblogs.com/xwdreamer/archive/2012/04/06/2434483.html

      借用一下上文中的访问权限表格:

 

      由上图可以看出:

            在同一个类下【就像是夫妻俩的财产,谁用不都是用么】,是不受访问权限所限制的,所谓的访问权限仅仅是对外而言的;

      亲身测试:

 

public class PermissionTest {

	private String namePri;	//私有成员变量
	protected String namePro;//受保护的成员变量
	public String namePub;//公有成员变量
	String nameDef;		//默认访问权限的成员变量
	
	protected void showMe(){
		System.out.println("This is my demo!");
	}
	
	public String getNamePri() {
		return namePri;
	}
	public void setNamePri(String namePri) {
		this.namePri = namePri;
	}
	public String getNamePro() {
		return namePro;
	}
	public void setNamePro(String namePro) {
		this.namePro = namePro;
	}
	public String getNamePub() {
		return namePub;
	}
	public void setNamePub(String namePub) {
		this.namePub = namePub;
	}
	public String getNameDef() {
		return nameDef;
	}
	public void setNameDef(String nameDef) {
		this.nameDef = nameDef;
	}
	
	public static void main(String[] args) {
		
		PermissionTest pt = new PermissionTest();
		pt.XXX;	//本处查看可调用到的对象属性
	}
}

      测试截图:

 

 

      在同一个包(package)下,私有便被隐藏了,因为人家都说是私有的了,当然是人家藏起来自己没事欣赏的,咱们是看不到了,至于其他的(protected、public以及默认的),还是可以正常访问的;

      亲身测试,同一包下:

 

public class SamePack extends PermissionTest{
	
	public static void main(String[] args) {
		
		PermissionTest pt = new PermissionTest();
		pt.XXX; //本处查看可调用到的对象属性
	}
}

      测试截图:

 

 

      在不同包中的非子类,既不同族(指的是同一个包下)又不是亲生的(说的是继承或实现喽),我想绝大数人都不会这么大方,把遗产家产留给外人吧。。。。。。 当然还是会有类似比尔盖茨之类的好人的(就比如public)。也就是在非亲非故的情况下,只有public修饰的内容是可以被访问到的;


      亲身测试不同包下:


public class SamePack{
	
	public static void main(String[] args) {
		
		PermissionTest pt = new PermissionTest();
		pt.XXX; //本处查看可调用到的对象属性
	}
}

      测试截图:

 

      最后是不同包下的子类,我不说相信大家都知道,这就是所谓的【私生子】了,当然要留一部分财产出来给人家的(protected的访问权限),public就不多了... 。。。

      注:在这儿得先强调一下,省得大家自己实践的时候会像我一样还要费事的去查:

      上面的前三项你如果当作方法修饰符的作用域问题来看,没什么问题,但是最后一项,也就是protected在不同包的子类访问这一项,就会发现自己错了,因为你会像我一样遇到以下错误:

http://bbs.csdn.net/topics/390821994

      我的错误情况,正如下图中所看到的,居然只有public的属性,那protected的又跑到哪儿去了呢???抓狂  看的我一脸蒙蔽啊 , 明明说好protected的修饰可以被不同包下的子类所访问的嘞,怎么到我这儿不好使了 唉....哭


      查了好久终于有点眉目了,原来我一直理解上就有错误,所谓的protected修饰,是指子类可以继承,重写,访问  ,是相当于在子类定义了该方法也就是在子类的创建中可以正常继承使用到父类中的受保护对象,而不是所谓的属性调用,就如下图所示:


      子类中的方法调用:

      看到这儿,相信大家也看懂了一些,我的理解也就到这儿了,希望对大家有所帮助!!!



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值