访问权限

修饰符当前类同一包内子孙类(同一包)子孙类(不同包)其他包
publicYYYYY
protectedYYYY/N (说明)N
defaultYYYNN
privateYNNNN
说明

在不同包内,可访问从基类继承来的子类的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变量公有变量
	}
}