首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 繼承核心知識體系:語法、權限、重載重寫、super、抽象類一網打盡

     編輯:Java 綜合教學

前言:繼承是 OOP 代碼復用的基石

Java 通過 extends 實現單繼承,所有類隱式繼承 Object。本文系統整理繼承語法、四大權限繼承規則、方法重載/重寫鐵律、super 三大用法、抽象類設計模式,配合圖表與代碼,構建完整知識體系。

一、繼承基本語法

修飾符 class 子類 extends 父類 {
    // 字段、方法、構造器、初始化塊、內部類...
}
  • 修飾符:public (全局可見) / 默認 (包可見);不可用 private/protected。
  • 關係術語:父類 = 基類 = 超類;子類 = 派生類。
  • UML 實線空心三角箭頭指向父類。

二、權限修飾符決定「能繼承什麼」

父類成員修飾符同包子類不同包子類備註
public✅✅完全公開
protected✅✅僅子類可見 (非同包非子類不可見)
默認 (package-private)✅❌同包可見
private❌❌封裝內部,子類不可直接訪問

繼承語法圖

特殊規則

  • 構造方法 不繼承,但子類構造器首行必須調用 super() (隱式/顯式)。
  • 子類可定義同名字段 (字段遮蔽) / 同名方法 (重寫/重載)。
  • Java 不支持多重繼承 (一個父類),但可實現多個接口彌補。
  • 間接繼承鏈:A → B → C,C 繼承 A 的非 private 成員。

三、方法重載:同名不同參

四要素 (滿足即重載)

  1. 方法名 相同
  2. 參數列表 不同 (類型/個數/順序任一不同)
  3. 返回類型 可同可不同 (不可作為區分依據)
  4. 修飾符 可同可不同
class Demo {
    void print(String s) { }
    void print(int i) { }           // 參數類型不同 ✅
    void print(String s, int i) { } // 參數個數不同 ✅
    int print(String s) { return 0; } // 僅返回類型不同 ❌ 編譯錯誤
}

重載示例

四、方法重寫:多態核心

八大鐵律 (背誦級)

  1. 方法名、參數列表、返回類型 完全一致 (返回類型可為子類 —— 協變返回)。
  2. 訪問權限 不能縮小 (≥ 父類):protected → public ✅,public → protected ❌。
  3. 拋出檢查異常 不能擴大 (可拋出子類異常或不拋)。
  4. 僅存在於 子類 vs 父類 (含間接父類);同一類內只能重載。
  5. static 方法 不能重寫為非 static (隱藏而非重寫)。
  6. 子類可定義同名 static 方法隱藏父類 (不構成重寫)。
  7. 非 static 不能重寫為 static。
  8. 父類 private 方法 不可重寫 (子類不可見)。

重寫規則圖

五、重載 vs 重寫:一張表秒懂

維度重載重寫
發生範圍同一類子類 vs 父類
方法名相同相同
參數列表必須不同必須相同
返回類型無關相同或子類
訪問權限無關不能縮小
綁定時機編譯期 (靜態)運行期 (動態)
多態性無核心體現

六、super 關鍵字:訪問父類三把鑰匙

class Child extends Parent {
    String name = "Child";

    void show() {
        // 1. 訪問父類字段 (解決遮蔽)
        System.out.println(super.name); // 輸出 Parent.name

        // 2. 調用父類方法
        super.parentMethod();

        // 3. 調用父類構造器 (構造器首行)
        public Child() {
            super("arg"); // 顯式調用帶參構造器
        }
    }
}

super訪問字段
super調用方法
super調用構造器1
super調用構造器2

限制

  • 僅能在子類實例方法/構造器中使用。
  • 無法訪問父類 private 成員。
  • super.super.method() 非法 (只能跳一層)。

七、抽象類:定義契約,延遲實現

五大核心規則

  1. abstract class 不可實例化 (不能 new)。
  2. 可包含:抽象方法、普通方法、字段、構造器、初始化塊、內部類/枚舉。
  3. 含抽象方法的類 必須聲明 abstract。
  4. 子類 必須實現所有抽象方法,否則子類仍為抽象類。
  5. 抽象類可以有構造器,供子類 super() 調用初始化父類狀態。
public abstract class Animal {
    protected String name;
    public Animal(String name) { this.name = name; } // 供子類調用
    public abstract void sound(); // 抽象方法
    public void breathe() { System.out.println("呼吸..."); } // 普通方法
}

class Dog extends Animal {
    public Dog(String name) { super(name); }
    @Override public void sound() { System.out.println("汪汪"); }
}

八、總結

Java 繼承 = extends 單繼承 + 四權限控制可見性 + 重寫實現多態 + super 打通子父鏈 + 抽象類定契約。掌握重載/重寫八大鐵律、權限繼承表、super 三用法、抽象類構造器作用,即可駕馭複雜類層次。記住:繼承是強耦合,慎用組合優先;重寫是多態之門,嚴守契約。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved