访问权限修饰符
Java 的访问权限控制(Access Modifiers)是面向对象编程中非常重要的一部分,用来控制类、变量、方法以及构造函数的可见性,从而实现封装。Java 提供了 4 种主要的访问权限修饰符:
| 修饰符 | 同类 | 同包 | 子类 | 所有类 |
|---|---|---|---|---|
private | ✅ | ❌ | ❌ | ❌ |
default | ✅ | ✅ | ❌ | ❌ |
protected | ✅ | ✅ | ✅ | ❌ |
public | ✅ | ✅ | ✅ | ✅ |
private
私有
作用:只能在 同一个类内部访问。
典型用途:类的内部属性、辅助方法,防止外部直接修改。
示例:
java
class Person {
private String name;
private void secret() {
System.out.println("This is private");
}
public void showSecret() {
secret(); // 类内部可以访问 private
}
}
public class Test {
public static void main(String[] args) {
Person p = new Person();
// p.name = "Tom"; // ❌ 编译错误
p.showSecret(); // ✅ 可以通过 public 方法访问
}
}default
包级别,未显式指定修饰符
作用:在同一个 包(package) 内可以访问,包外不可访问。
典型用途:包内部共享的类、方法或属性。
示例:
java
package mypackage;
class MyClass { // default 修饰符
void display() { // default 修饰符
System.out.println("Hello from default");
}
}protected
受保护:父类想让子类继承使用,但不希望完全公开给所有类。换句话说:只给子类中使用
作用:
- 同一个包内可以访问
- 不同包的子类可以访问
示例:
java
package parent;
public class Parent {
protected String message = "Hello";
protected void greet() {
System.out.println(message);
}
}java
package child;
import parent.Parent;
public class Child extends Parent {
public void show() {
System.out.println(message); // ✅ protected 子类可以访问
greet(); // ✅ protected 子类可以访问
}
}public
- 作用:任何地方都可以访问。
- 典型用途:类库接口、主入口类、公共 API。
- 示例:
java
public class Hello {
public void sayHi() {
System.out.println("Hi!");
}
}