訪問(wèn)控制protected是不同包中對(duì)子類可見(jiàn)

以下例子說(shuō)明:protected是不同包中對(duì)子類可見(jiàn),對(duì)非子類不可見(jiàn)。 
馬克- to-win:馬克 java社區(qū):防盜版實(shí)名手機(jī)尾號(hào): 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是不同包中對(duì)子類(Test)可見(jiàn),馬 克-t o-w i n
        printIProtected();
    }
}

public class Test  {
    public static void main(String[] args) {
        A a=new A();
   //     a.i=7;//報(bào)錯(cuò), 注意這里不能直接用
 //       a.printIProtected();//報(bào)錯(cuò), 注意這里不能直接用
        B b = new B();
 //     b.i = 10;//報(bào)錯(cuò),Test不是A子類,非子類不能訪問(wèn)protected
 //     b.printIProtected();//報(bào)錯(cuò),Test不是A子類,非子類不能訪問(wèn)protected
        b.printIInB();
    }
}


結(jié)果:
in B i=0
i=0




例1.2.2.b:---本例為非正常用法,通常不直接訪問(wèn)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是不同包中對(duì)子類(Test)可見(jiàn),馬 克-t o-w i n
        printIProtected();
    }
    public static void main(String[] args) {
        Test b = new Test();
        b.i = 10;//protected是不同包中對(duì)子類(Test)可見(jiàn),
        b.printIProtected();//protected是不同包中對(duì)子類(Test)可見(jiàn),
        b.printIInB();
    }

}

運(yùn)行結(jié)果:

i=10
in B i=10
i=10




2.3 以下例子說(shuō)明: public, private,protected的用法。
例1.2.3---本章源碼

class A {
    protected int i;
    public int ipub;
    private int ipri;//私有變量, 子類訪問(wèn)不到。
    public void printI_to_win() {
        System.out.println("i=" + i);
    }
}

class B extends A {
    public void BprintI() {
        System.out.println("i= in B " + i);//子類可以訪問(wèn)protected
        // ipri=9; //error, can not access訪問(wèn)
        ipub = 9;
    }
}

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

 

result is:

i=10
i= in B 10