子類實例化時,JVM 先在堆中分配父類對象,再在其外層追加子類特有字段,形成完整子類對象。因此:
private),但 private 字段不可直接訪問,需通過父類 public/protected 方法(getter/setter)間接操作。| 字段類型 | 子類是否擁有 | 子類能否直接訪問 | 備註 |
|---|---|---|---|
private 實例字段 | 是 | 否 | 需父類暴露訪問器 |
static 字段 | 是 | 是(若非 private) | 屬於類,非實例;子類可隱藏但不可覆寫 |
| 被子類同名字段隱藏 | 是 | 是(訪問的是子類字段) | 通過 super.field 訪問父類字段 |
super(...),否則編譯錯誤。super(參數)。| 維度 | 重載 | 重寫 |
|---|---|---|
| 發生範圍 | 同一類內部 | 父子類之間 |
| 方法名 | 相同 | 相同 |
| 參數列表 | 必須不同(類型/個數/順序) | 必須相同 |
| 返回類型 | 可同可不同 | 必須相同或為協變類型 |
| 訪問修飾符 | 無限制 | 子類不能縮小(如父 protected → 子 public) |
| 拋出異常 | 無限制 | 子類不能拋出更寬泛的受檢異常 |
| 多態性質 | 編譯期靜態綁定 | 運行期動態綁定 |
Father father = new Child(); // 向上轉型
class Father { int x = 1; }
class Child extends Father { int x = 2; }
Father f = new Child();
System.out.println(f.x); // 輸出 1 —— 字段靜態綁定,看引用類型
結論:只有實例方法具備多態;字段、靜態方法、私有方法、構造器均為靜態綁定。
private + getter/setter,避免隱藏混淆。@Override,編譯器自動校驗簽名一致性。