访问控制protected是不同包中对子类可见

以下例子说明:protected是不同包中对子类可见,对非子类不可见。 
马克- to-win:马克 java社区:防盗版实名手机尾号: 73203。
例1.2.2.a:---本例为正常用法。
package p1;
public class A {
    protected int i;
    protected void printIProtected() {
        System.out.println("i=" + i);
    }
}


package p2;
import p1.A;
class B extends A {
    void printIInB() {
        System.out.println("in B i=" + i);//protected是不同包中对子类(Test)可见,马 克-t o-w i n
        printIProtected();
    }
}

public class Test  {
    public static void main(String[] args) {
        A a=new A();
   //     a.i=7;//报错, 注意这里不能直接用
 //       a.printIProtected();//报错, 注意这里不能直接用
        B b = new B();
 //     b.i = 10;//报错,Test不是A子类,非子类不能访问protected
 //     b.printIProtected();//报错,Test不是A子类,非子类不能访问protected
        b.printIInB();
    }
}


结果:
in B i=0
i=0




例1.2.2.b:---本例为非正常用法,通常不直接访问protected方法。比如b.printIProtected();


package p1;
public class A {
    protected int i;
    protected void printIProtected() {
        System.out.println("i=" + i);
    }
}

package p2;
import p1.A;
public class Test extends A {
    void printIInB() {
        System.out.println("in B i=" + i);//protected是不同包中对子类(Test)可见,马 克-t o-w i n
        printIProtected();
    }
    public static void main(String[] args) {
        Test b = new Test();
        b.i = 10;//protected是不同包中对子类(Test)可见,
        b.printIProtected();//protected是不同包中对子类(Test)可见,
        b.printIInB();
    }

}

运行结果:

i=10
in B i=10
i=10




2.3 以下例子说明: public, private,protected的用法。
例1.2.3---本章源码

class A {
    protected int i;
    public int ipub;
    private int ipri;//私有变量, 子类访问不到。
    public void printI_to_win() {
        System.out.println("i=" + i);
    }
}

class B extends A {
    public void BprintI() {
        System.out.println("i= in B " + i);//子类可以访问protected
        // ipri=9; //error, can not access访问
        ipub = 9;
    }
}

public class Test {
    public static void main(String[] args) {
        B b = new B();
        b.i = 10;//同一包中其他类(Test)可以访问protected
        b.ipub = 8;
        b.printI_to_win();
        b.BprintI();
    }
}

 

result is:

i=10
i= in B 10