訪問(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