Java 提供了四种访问权限修饰符,用于控制类、方法和变量的访问范围。它们是 public
、protected
、default
(无修饰符)和 private
。以下是对这四种修饰符的详细解释和用法
目录
四大权限修饰符
1. public
- 范围:任何地方都可以访问。
- 用法:适用于需要被广泛使用的类、方法和变量。
public class PublicClass {
public int publicVar = 10;
public void publicMethod() {
System.out.println("Public Method");
}
}
public class TestPublic {
public static void main(String[] args) {
PublicClass obj = new PublicClass();
System.out.println(obj.publicVar); // 访问 public 变量
obj.publicMethod(); // 调用 public 方法
}
}
2. protected
- 范围:同一个包中的类和任何子类(即使在不同的包中)。
- 用法:适用于希望子类能够访问但不希望外部类直接访问的成员。
public class ProtectedClass {
protected int protectedVar = 10;
protected void protectedMethod() {
System.out.println("Protected Method");
}
}
class SubClass extends ProtectedClass {
public void accessProtected() {
System.out.println(protectedVar); // 访问 protected 变量
protectedMethod(); // 调用 protected 方法
}
}
public class TestProtected {
public static void main(String[] args) {
SubClass obj = new SubClass();
obj.accessProtected();
}
}
3. default(无修饰符)
- 范围:同一个包中的类可以访问,包外的类不能访问。
- 用法:适用于希望在包内共享但不希望包外访问的成员。
class DefaultClass {
int defaultVar = 10; // default 变量
void defaultMethod() {
System.out.println("Default Method");
}
}
public class TestDefault {
public static void main(String[] args) {
DefaultClass obj = new DefaultClass();
System.out.println(obj.defaultVar); // 访问 default 变量
obj.defaultMethod(); // 调用 default 方法
}
}
4. private
- 范围:只能在同一个类中访问。
- 用法:适用于仅希望在类内部使用的成员,提供数据封装。
public class PrivateClass {
private int privateVar = 10;
private void privateMethod() {
System.out.println("Private Method");
}
public void accessPrivate() {
System.out.println(privateVar); // 访问 private 变量
privateMethod(); // 调用 private 方法
}
}
public class TestPrivate {
public static void main(String[] args) {
PrivateClass obj = new PrivateClass();
obj.accessPrivate();
}
}
总结
访问控制的设计建议
- 最小化访问范围:尽可能减少成员的可访问性,以遵循信息隐藏原则,提高代码的安全性和可维护性。
- 使用
public
谨慎:仅在需要被广泛访问的情况下使用public
,否则优先使用protected
或default
。 - 封装数据:使用
private
修饰符封装类的内部数据,并提供公共方法来控制对这些数据的访问。 - 包结构设计:合理设计包结构,以便使用
default
访问控制来共享包内成员,同时隐藏实现细节。