关于protected 的细节

最近,我在狠看 SCJP,呵呵,所以记录比较琐碎了,哈哈
------------------------------------------------------------------------------

观察超类的一个具有protected访问级别的实例变量

1
2
3
4
5
6
7
package scjp;
 
public class Parent {
 
	protected int x=9;//protected access
 
}



代码中将变量x声明为protected,这使SCJP包中的所有其他类都可以访问该变量,也使包外的任何子类都能够继承它。
现在,我们在另外一个包中创建一个子类,并尝试使用变量x(子类继承的变量):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package other;
import scjp.Parent;;
 
public class Child extends Parent{
 
	public void testIt(){
		System.out.println("x is "+x);
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Child cd=new Child();
		cd.testIt();
		
//		Parent p=new Parent();
//		System.out.println("x in parent is "+p.x);
	}
}


现在上面的语句是完全是可以通过编译的,并输出正确的结果: x is 9
但是,如果将注释的两行去掉,将无法通过编译,运行结果为:

1
2
3
4
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	The field Parent.x is not visible
 
	at other.Child.main(Child.java:17)


这就充分说明,对于包外的其他非子类,protected变量是不可见的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值