关于protected 的细节
最近,我在狠看 SCJP,呵呵,所以记录比较琐碎了,哈哈 
------------------------------------------------------------------------------ 
观察超类的一个具有protected访问级别的实例变量 
| 1 | package scjp; public class Parent { protected int x=9;//protected access } | 
代码中将变量x声明为protected,这使SCJP包中的所有其他类都可以访问该变量,也使包外的任何子类都能够继承它。 
现在,我们在另外一个包中创建一个子类,并尝试使用变量x(子类继承的变量): 
| 1 | 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 | 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变量是不可见的。 
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号