在Java中,访问权限控制符用于控制类、方法、变量等成员的访问权限。这些访问权限控制符决定了哪些代码可以访问这些成员。Java提供了四种访问权限控制符:public
、protected
、default
(也称为包级私有)和private
。
1. public
public
访问权限是最宽松的。如果一个类的成员被声明为 public
,那么它就可以被任何其他的类访问,无论这些类是否在同一个包中。
2. protected
protected
访问权限表示成员可以被同一个包中的类访问,也可以被不同包中的子类访问。注意,这里指的是子类,而不是普通的类。
3. default(包级私有)
如果一个成员没有显式地指定访问权限控制符(即没有使用 public
、protected
或 private
关键字),那么它将被视为具有默认的访问权限,也称为包级私有。具有默认访问权限的成员只能被同一个包中的类访问。
4. private
private
访问权限是最严格的。如果一个类的成员被声明为 private
,那么它只能被该类自己访问,不能被任何其他类(包括同一个包中的类)访问。
示例
// 示例类 | |
public class AccessModifiersExample { | |
// public 成员变量 | |
public int publicVar; | |
// protected 成员变量 | |
protected int protectedVar; | |
// 默认(包级私有)成员变量 | |
int defaultVar; // 没有显式指定访问权限控制符 | |
// private 成员变量 | |
private int privateVar; | |
// public 方法 | |
public void publicMethod() { | |
// ... | |
} | |
// protected 方法 | |
protected void protectedMethod() { | |
// ... | |
} | |
// 默认(包级私有)方法 | |
void defaultMethod() { // 没有显式指定访问权限控制符 | |
// ... | |
} | |
// private 方法 | |
private void privateMethod() { | |
// ... | |
} | |
} | |
// 同一个包中的另一个类 | |
class AnotherClassInSamePackage { | |
// 可以访问 publicVar、protectedVar 和 defaultVar | |
// 但不能访问 privateVar | |
// 可以调用 publicMethod() 和 protectedMethod(),但不能调用 privateMethod() | |
// 也不能调用 defaultMethod(),因为默认方法只能在同一个包中通过对象实例调用 | |
} | |
// 不同包中的子类 | |
class SubclassInDifferentPackage extends AccessModifiersExample { | |
// 可以访问 publicVar、protectedVar(继承而来) | |
// 但不能访问 defaultVar 和 privateVar | |
// 可以调用 publicMethod()、protectedMethod(继承而来) | |
// 但不能调用 privateMethod() 和 defaultMethod() | |
} | |
// 不同包中的另一个类 | |
class ClassInDifferentPackage { | |
// 只能访问 publicVar(如果AccessModifiersExample的实例被传递到此类中) | |
// 不能访问 protectedVar、defaultVar 和 privateVar | |
// 也不能调用 protectedMethod()、defaultMethod() 和 privateMethod() | |
} |
通过合理地使用这些访问权限控制符,我们可以更好地控制代码的封装性和可维护性,确保类中的成员只被合适的代码访问和修改。