zoukankan      html  css  js  c++  java
  • 关于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变量是不可见的。

  • 相关阅读:
    POJ 2002 Squares
    POJ 1840 Eqs
    POJ 1759 Garland
    UVA 572 Oil Deposits
    POJ 3278 Catch That Cow
    POJ 2488 A Knight's Journey
    UVA 699 The Falling Leaves
    [Poi1999] 原始生物
    [bzoj3033] 太鼓达人
    [bzoj1123] BLO
  • 原文地址:https://www.cnblogs.com/lan0725/p/1873853.html
Copyright © 2011-2022 走看看