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

Java 繼承機制全解析:從語法規則到多態實戰

     編輯:Java 綜合教學

前言:為何繼承是 OOP 基石?

繼承是面向對象三大特性 (封裝、繼承、多態) 之一,實現代碼復用的核心手段。Java 中所有類隱式繼承 java.lang.Object,形成單根繼承樹。本文系統梳理繼承語法、權限規則、方法重寫/重載區別、super 用法及抽象類設計,助你構建清晰的類層次結構。

一、繼承語法與基本規則

修飾符 class 子類 extends 父類 {
    // 類體:字段、方法、構造器、內部類...
}
  • extends 關鍵字建立「is-a」關係:Dog extends Animal 即「狗是動物」。
  • Java 單繼承:一個類只能有一個直接父類,但可多層間接繼承 (A→B→C)。
  • 修飾符通常為 public 或默認 (包可見);不可用 private/protected 修飾頂級類。

二、子類能繼承什麼?(權限決定一切)

父類成員修飾符同包子類不同包子類說明
public✅ 可見✅ 可見完全公開
protected✅ 可見✅ 可見跨包仍可見 (僅限子類)
默認 (package-private)✅ 可見❌ 不可見僅限同包
private❌ 不可見❌ 不可見封裝在父類內部

訪問權限矩陣

特殊規則:

  • 構造方法 不被繼承,但子類構造器首行隱式/顯式調用 super()。
  • 子類可定義同名字段 (字段遮蔽) 或同名方法 (重寫/重載)。

三、方法重寫 vs 重載:一張表看懂本質區別

維度重寫重載
發生位置子類 vs 父類同一個類內部
方法名必須相同必須相同
參數列表必須相同必須不同 (類型/個數/順序)
返回類型相同或父類返回類型的子類 (協變返回)可不同,與重載無關
訪問權限不能縮小 (≥ 父類)無限制
拋出異常不能拋出更寬泛的檢查異常無限制
綁定時機運行期動態綁定 (多態核心)編譯期靜態綁定

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

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

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

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

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

限制:super 僅能在子類實例方法/構造器中使用;無法訪問父類 private 成員。

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

核心規則

  • abstract class 不可實例化 (不能 new)。
  • 可包含:抽象方法、普通方法、字段、構造器、初始化塊、內部類/枚舉。
  • 含抽象方法的類 必須 聲明為抽象類。
  • 子類必須實現所有抽象方法,否則子類仍為抽象類。

抽象類可以有構造器嗎?

可以! 用於初始化父類字段,被子類構造器通過 super() 調用。甚至可被本類其他構造器 this() 調用。

public abstract class Animal {
    protected String name;
    public Animal(String name) { this.name = name; } // 供子類調用
    public abstract void sound();
}

六、實戰設計原則

  1. 優先組合,繼承次之:只有明確「is-a」且需複用父類邏輯時才用繼承。
  2. 保護封裝:字段 private,暴露 protected getter/setter 供子類用。
  3. 設計文檔化:@Override 註解標註重寫方法,編譯器自動校驗簽名一致性。
  4. 模板方法模式:父類定義算法骨架 (final 方法),子類實現具體步驟 (abstract/protected 方法)。

七、總結

Java 繼承通過 extends 實現單繼承,權限修飾符精細控制可見性,super 打通子父調用鏈,抽象類提供「半成品」契約。掌握重寫/重載區別、動態綁定機制,是寫出可擴展、可維護代碼的關鍵。記住:繼承是強耦合,慎用且善用。

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