对于四个权限修饰符的作用范围,不再赘述,仅给出验证程序,供大家参考。
package bb;
public class B{
private int x=2;
private int y=3;
//
void show1(){
System.out.println(x);
}
protected void show2(){
System.out.println(y);
}
}
package dd;
public class D{
private int z=4;
protected void show3(){
System.out.println(z);
}
public void show4(){
System.out.println(z);
}
}
import bb.*;
import dd.*;
class A{
private int i=1;
private int getI(){
return i;
}
void show(){
System.out.println(getI());
}
}
public class TestAcess extends B{
public static void main(String [] args){
A a=new A();
D d=new D();
TestAcess c=new TestAcess();
//a.getI();
/*
说明在类的外部不能访问私有成员。
报错:TestAcess.java:31: 错误: getI()可以在A中访问private
a.getI();
^
*/
a.show();
/*
说明在同一个包内、类的外部可以访问默认成员;
而且私有成员可以在类的内部实现访问。
*/
//c.show1();
/*
说明在不同的包的子类,不能访问其父类的默认成员
报错:TestAcess.java:43:错误: 找不到符号
c.show1();
^
符号: 方法 show1()
位置: 类型为C的变量 c
*/
c.show2();
/*
说明在不同的包的子类,能访问其父类的保护成员
*/
//d.show3();
/*
说明在不同的包的不同类之间,不能访问保护成员
报错:TestAcess.java:61: 错误: show3()可以在D中访问protected
d.show3();
^
*/
d.show4();
/*
说明在不同的包的不同类之间,能访问公有成员
*/
}
}