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

Java 繼承機制深度解析:建構子調用順序與 super 關鍵字

     編輯:Java 相關知識

三層繼承鏈建構子執行流程完整圖解

繼承是物件導向核心。本文透過 Person → Student → GoodStudent 三層繼承,實際演示建構子調用順序、super() 顯式調用與多載建構子的交互行為。

完整程式碼

package com.itheima;

public class InheritanceConstructorDemo {
    public static void main(String[] args) {
        System.out.println("=== 建立 Student ===");
        Student s1 = new Student();
        System.out.println("-------------------------");
        Student s2 = new Student("自訂參數");
        System.out.println("-------------------------");
        System.out.println("=== 建立 GoodStudent ===");
        GoodStudent g1 = new GoodStudent();
        System.out.println("-------------------------");
    }
}

class Person {
    Person() { System.out.println("Person 無參建構子"); }
    Person(String arg) { System.out.println("Person(String): " + arg); }
    Person(String a, String b) { System.out.println("Person(String,String): " + a + b); }
}

class Student extends Person {
    Student() {
        super("有參數!"); // 顯式調用父類有參建構子
        System.out.println("Student 無參建構子");
    }
    Student(String arg) {
        super("父類", "雙參"); // 調用父類雙參建構子
        System.out.println("Student(String): " + arg);
    }
}

class GoodStudent extends Student {
    GoodStudent() {
        super("來自 GoodStudent!"); // 調用 Student(String)
        System.out.println("GoodStudent 無參建構子");
    }
}

執行輸出與流程分析

=== 建立 Student ===
有參數!
Student 無參建構子
-------------------------
父類雙參
Student(String): 自訂參數
-------------------------
=== 建立 GoodStudent ===
父類雙參
Student(String): 來自 GoodStudent!
GoodStudent 無參建構子
-------------------------

關鍵規則總結

  1. 子類建構子第一行必須是 super(...) 或 this(...),否則編譯器隱式插入 super()。
  2. 父類無無參建構子時,子類必須顯式調用 super(參數)。
  3. 建構子不會被繼承,但子類實例化時會自動觸發父類建構子鏈。
  4. super 與 this 不能同時出現在建構子第一行。

常見錯誤與最佳實務

  • ❌ 忘記寫 super() 導致調用父類無參建構子失敗(父類無無參建構子時)。
  • ✅ 明確調用 super(參數) 表達設計意圖,提升可讀性。
  • ✅ 建構子中避免複雜邏輯,僅做欄位初始化。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved