封裝的核心是**訪問控制**,Java 提供四個層級,從寬到嚴:
| 修飾符 | 同類 | 同包 | 子類(異包) | 非子類(異包) | 適用對象 |
|---|---|---|---|---|---|
public | ✓ | ✓ | ✓ | ✓ | 類、接口、成員、構造器 |
protected | ✓ | ✓ | ✓ | ✗ | 成員、構造器 |
default (無修飾符) | ✓ | ✓ | ✗ | ✗ | 類、接口、成員、構造器 |
private | ✓ | ✗ | ✗ | ✗ | 成員、構造器、內部類 |
對所有代碼可見,構成類的**對外契約**。接口方法隱式 public。
super.xxx 或直接 xxx),不能通過父類引用訪問。public class:公開類,文件名必須與類名一致,每個編譯單元最多一個。default class:包私有類,輔助類、內部實現類,文件名無要求。// 單例:私有構造器 + 靜態工廠
public class Singleton {
private Singleton() {}
private static final Singleton INSTANCE = new Singleton();
public static Singleton getInstance() { return INSTANCE; }
}
// 建造器:私有構造器 + 靜態內部 Builder
public class User {
private final String name; private final int age;
private User(Builder b) { this.name = b.name; this.age = b.age; }
public static class Builder {
private String name; private int age;
public Builder name(String n) { this.name = n; return this; }
public Builder age(int a) { this.age = a; return this; }
public User build() { return new User(this); }
}
}
public class。public class 文件名必須同名(大小写敏感)。public class 時文件名任意。private,需要時再放寬。訪問控制不是語法糖,而是**架構邊界的代碼表達**。