繼承是物件導向核心。本文透過 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 無參建構子 -------------------------
super(...) 或 this(...),否則編譯器隱式插入 super()。super(參數)。super 與 this 不能同時出現在建構子第一行。super() 導致調用父類無參建構子失敗(父類無無參建構子時)。super(參數) 表達設計意圖,提升可讀性。