java访问权限有四种
private:私有的,只有本类访问
default(通常忽略不写):同一个包内访问
protected:同一个包,子类均可以访问
public :公开的,所有类都可以访问
使用范围
四种都可以用来修饰成员变量、成员方法、构造函数
default和public可以修饰类
package test1;
public class A {
private int v1 = 1;
int v2 = 2;//如果没有写private/protected/public
//那就是default。但是不能显式写default,写了编译器将报错
protected int v3 = 3;
public int v4 = 4;
private void showv1() {
System.out.println(v1);
}
void showv2() {
System.out.println(v2);
}
protected void showv3() {
System.out.println(v3);
}
public void showv4() {
System.out.println(v4);
};
}
package test1;
public class B {
public void show() {
//B is not subclass of A//B不是A的子类,A的成员方法和变量无法访问
//System.out.println(v1);
//System.out.println(v2);
//System.out.println(v3);
//System.out.println(v4);
//showv1();
//showv2();
//showv3();
//showv4();
A obj = new A();//A类的private成员不能对外分享,但是其它的成员变量可以被同一个包的其他类访问
//System.out.println(obj.v1);error , private
System.out.println(obj.v2);
System.out.println(obj.v3);
System.out.println(obj.v4);
//obj.showv1();
obj.showv2();
obj.showv3();
obj.showv4();
}
}
package test1;
public class C extends A{//c类继承与A类,因此C类是A的子类,而且C类和A类在同一个包中
public void show() {//子类继承父类所有的东西,但是不能直接访问private的成员
//System.out.println(v1); error ,private;
System.out.println(v2);
System.out.println(v3);
System.out.println(v4);
//showv1();error ,private
showv2();
showv3();
showv4();
A obj = new A();
//System.out.println(obj.v1); error ,private
System.out.println(obj.v2);
System.out.println(obj.v3);
System.out.println(obj.v4);
//obj.showv1();error private
obj.showv2();
obj.showv3();
obj.showv4();
}
}
package test2;
import test1.A;
public class D extends A{//D是A的子类,但是不同包;
public void show() {//D作为A的子类,不能直接访问A的private,又因为D和A不同包,不能访问default部分
//System.out.println(v1);
//System.out.println(v1);
System.out.println(v3);
System.out.println(v4);
//showv1();error private
//showv1();error default
showv3();
showv4();
A obj = new A();
//System.out.println(obj.v1);//error,private
//System.out.println(obj.v2); //error ,default
//System.out.println(obj.v3);// error protected作为子类才能访问
System.out.println(obj.v4);
//obj.showv1();private
//obj.showv2();default
//obj.showv3();protected 只能子类才能访问
obj.showv4();
}
}