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(); } }