四種權限修飾符的訪問範圍 public > protected > default(表示什麼都不寫) > private
四種情況 | public | protected | default | private |
---|---|---|---|---|
同一個類中 | yes | yes | yes | yes |
同一個包下 | yes | yes | yes | no |
不同包是子類 | yes | yes | no | no |
不同包不是子類 | yes | no | no | no |
下面對不同權限修飾符的成員變量的訪問範圍進行了驗證:
同一個類中:
package cn.itcast.package1;
public class Base {
public int fieldPublic;
protected int fieldProtected;
int fieldDefault;
private int fieldPrivate;
public void test() {
System.out.println(fieldPublic);//可以訪問
System.out.println(fieldProtected);//可以訪問
System.out.println(fieldDefault);//可以訪問
System.out.println(fieldPrivate);//可以訪問
}
}
同一個包下:
package cn.itcast.package1;
public class SamePackage {
public void test() {
System.out.println(new Base().fieldPublic);//可以訪問
System.out.println(new Base().fieldProtected);//可以訪問
System.out.println(new Base().fieldDefault);//可以訪問
System.out.println(new Base().fieldPrivate);//不可以訪問,×
}
}
不同包卻是子類:
package cn.itcast.package2;
import cn.itcast.package1.Base;
public class DifferentPackageButSubClass extends Base {
public void test() {
System.out.println(super.fieldPublic);//可以訪問
System.out.println(super.fieldProtected);//可以訪問
System.out.println(super.fieldDefault);//不可以訪問,×
System.out.println(super.fieldPrivate);//不可以訪問,×
}
}
不同包不是子類:
package cn.itcast.package2;
import cn.itcast.package1.Base;
public class DifferentPackageNotSubClass {
public void test() {
System.out.println(new Base().fieldPublic);//可以訪問
System.out.println(new Base().fieldProtected);//不可以訪問,×
System.out.println(new Base().fieldDefault);//不可以訪問,×
System.out.println(new Base().fieldPrivate);//不可以訪問,×
}
}