阅读量:0
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
访问控制来共享包内成员,同时隐藏实现细节。