在Java中,使用访问修饰符来保护对类、变量、方法和构造方法的访问。Java提供了4种不同的访问权限,以实现不同范围的访问能力。
限定词 | 同一个类中 | 同一个包中 | 不同包中的子类 | 不同包中的非子类 |
---|---|---|---|---|
private | ● | |||
无限定词(默认) | ● | ● | ||
protected | ● | ● | ● | |
public | ● | ● | ● | ● |
1、私有的访问修饰符——private
private访问修饰符是最严格的访问级别,所有被声明为private的方法、变量和构造方法只能被所属类访问,并且类型和接口不能声明为private。
声明为私有访问类型的变量只能通过类中的公共方法(一般定义为get/set该属性值)被外部类访问。private访问修饰符主要用来隐藏类的实现细节和保护类的数据。
public class PrivateTest {
private String name; // 声明私有的成员变量
public String getName() { // 私有成员变量name的get方法
return name;
}
public void setName(String name) { // 私有成员变量name的set方法
this.name = name;
}
}
class RunPrivateTest {
public static void main(String[] args) {
PrivateTest p = new PrivateTest(); // 创建类PrivateTest的对象
p.setName("private访问修饰符"); // 调用对象的set方法
System.out.println("name = " + p.getName()); // 通过对象的get方法获取name值
}
}
2、默认的访问修饰符——不使用任何关键字
使用默认访问修饰符声明的变量和方法,可以被这个类本身或者与类在同一个保内其它类访问。接口里的变量都是隐式声明为public static final,而接口里的方法默认情况下范围权限为public。
3、受保护的访问修饰符——protected
被声明为protected的变量、方法、构造方法能被同一个包中的任何类访问,也能够被不同包中的子类访问(为子类而生)。
protected访问修饰符不能修饰类和接口,方法和成员变量能够声明为protected,但是接口的成员变量和成员方法不能声明为protected。
4、公有的访问修饰符——public
被声明为public的类、方法、构造方法和接口能够被任何其它类访问。如果几个相互访问的public类分布在不同的包中,需要使用import关键字导入相应的public类所在的包。
由于类的继承性,类所有的公有方法和变量都能被其子类继承。
另外,类还有外部类和内部类之分,外部类,只能使用public和default(默认)来修饰。内部类,可以有如上4种。
内部类和外部类的其它成员(属性和方法)一样,是外部类的成员。所以,它不仅有外部类的public和default(默认)可用;作为外部类的成员,它又具有类成员的可用修饰符protected及private修饰定义。