访问控制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