访问权限
修饰符 | 当前类 | 同一包内 | 子孙类(同一包) | 子孙类(不同包) | 其他包 |
---|---|---|---|---|---|
public | Y | Y | Y | Y | Y |
protected | Y | Y | Y | Y/N (说明) | N |
default | Y | Y | Y | N | N |
private | Y | N | N | N | N |
说明
在不同包内,可访问从基类继承来的子类的protected成员,但不可访问基类的protected成员。
实例
// Base.java
package package1;
public class Base {
public int public_var;
protected int protected_var;
int default_var;
private int private_var;
}
// Main.java
public class Main{
public static void main(String[] args) {
Base base = new Base();
// System.out.println(sub.private_var); // 报错,private变量只能被所属类访问
System.out.println(base.default_var); // default变量可被同一包下的类访问
System.out.println(base.protected_var); // protected变量可被同一包下的类访问
System.out.println(base.public_var); // public变量公有变量
}
}
// Sub.java
package package2;
import package1.Base;
public class Sub extends Base{
public static void main(String[] args) {
Base base = new Base();
// System.out.println(base.private_var); // 报错,private变量只能被所属类访问
// System.out.println(base.default_var); // 报错 ,default变量只能被同一包下的类访问
// System.out.println(base.protected_var); // 报错,不同包下,子类不能访问父类的protected变量
System.out.println(base.public_var); // public变量公有变量
Sub sub = new Sub();
// System.out.println(main.private_var);
// 报错,private变量只能被所属类访问
// System.out.println(main.default_var); // 报错 default变量只能被同一包下的类访问
System.out.println(sub.protected_var); // 不同包下,子类可以访问继承自父类的protected变量
System.out.println(sub.public_var); // public变量公有变量
}
}