| 修飾符 | 同一類別 | 同一套件 | 不同套件子類別 | 不同套件非子類別 | 可被繼承 |
|---|---|---|---|---|---|
| public | ✔ | ✔ | ✔ | ✔ | ✔ |
| protected | ✔ | ✔ | ✔ | ✘ | ✔ |
| default (package-private) | ✔ | ✔ | ✘ | ✘ | 僅同套件子類別 |
| private | ✔ | ✘ | ✘ | ✘ | ✘ |
假設 package first 中的 FirstClass 定義四個欄位:
public int aa;
private int xiaoaa;
protected int cc;
int xiaocc; // default
SecondClass extends FirstClass(同在 first 套件)
可繼承:aa、cc、xiaocc(private xiaoaa 不可見)
ThirdClass extends FirstClass(位於 package second)
可繼承:aa、cc(default xiaocc 跨套件不可見,private 同樣不可見)
private,透過 public/protected getter/setter 控制存取,符合資訊隱藏原則。protected。default 作為 API 邊界,易造成跨模組維護困擾。建構子不可繼承,但子類別建構子會隱式或顯式呼叫父類別建構子。父類別若無 public/protected 建構子,子類別將無法實例化。