protected修饰的含义

今天将近花了三个小时才弄懂protected这个关键字的含义:

package July;

public class Clone1 {
protected String name="clone1";
}


package clone;

import July.Clone1;

public class Clone2 extends Clone1{
public void print() {
Clone1 c = new Clone1();
/*
* 此处报错:The field clone1.name is not visible
* 如果两个类在同一个包就不会报错
* 这里不会因为Clone2继承了Clone1而使得可以访问
*/
System.out.println(c.name);

/*
* 可以通过new出本类对象访问形式访问
*/
Clone2 c2 = new Clone2();
System.out.println(c2.name);
/*
* 直接访问没错
*/
System.out.println(name);
}
}

protected的访问权限是包内,类内和子类。[color=red]这里的子类,要理解这个子类。[/color]
[color=green]下面是在我在百度中提问后一个朋友的回答:
因为protected属于受保护的访问权限,一个类中的成员如果使用了protected访问权限,则只能被本包及不同包的子类访问。
很显然你的两个类不在同一个包,就因该用子类的实例对象访问,而你却在包含子类的包中中实例化了父类对象,你可能在想,我明明是在子类中实例化了父类对象,我要访问我自己的成员还不行吗?。。可你要想清楚,你的父类并不在这个包。(这时你在子类的包中用父类的实例化对象访问用protected修饰的属性,它压根就找不到,所以会报出不可见的错误)所以你必须用Clone2 c = new Clone2();c.name;或是用匿名对象
new Clone2().name;(其实是子类的一个匿名对象)访问。 [/color]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值