繼承是面向對象三大特性之一,實現代碼復用與類層次結構構建的基石。本文系統梳理繼承核心概念、實現語法、構造器鏈機制,並重點講解 super 關鍵字的三大使用場景。
Object。is-a(繼承)、has-a(組合)、like-a(實現接口)。public class Teacher extends Person {
// 子類自動擁有父類非 private 成員
}
| 場景 | 語法 | 說明 |
|---|---|---|
| 訪問父類被隱藏的成員(變量/方法) | super.field / super.method() | 子類定義同名成員時,用於區分調用父類版本 |
| 調用父類構造器 | super(args) | 必須置於子類構造器第一行;若省略,隱式調用父類無參構造器 |
| 調用父類被覆蓋的方法 | super.overriddenMethod() | 在子類覆蓋方法中,保留父類邏輯並擴展 |
class A {
public A() { System.out.println("A構造器"); }
public void showB() { System.out.println("父類showB"); }
}
class B extends A {
public B() { super(); System.out.println("B構造器"); } // 可省略 super()
public void showB() {
System.out.println("子類showB");
super.showB(); // 顯式調用父類方法
}
}
public class Demo {
public static void main(String[] args) {
new B().showB();
}
}
// 輸出:
// A構造器
// B構造器
// 子類showB
// 父類showB
class Teacher {
private String name, school;
public Teacher(String name, String school) { this.name=name; this.school=school; }
public void teaching() { System.out.println("授課前準備"); }
}
class JavaTeacher extends Teacher {
public JavaTeacher(String name, String school) { super(name, school); }
@Override public void teaching() {
super.teaching(); // 復用父類通用邏輯
System.out.println("打開Eclipse");
System.out.println("編寫Java代碼");
}
}
class DBTeacher extends Teacher {
public DBTeacher(String name, String school) { super(name, school); }
@Override public void teaching() {
super.teaching();
System.out.println("打開Oracle");
System.out.println("編寫PL/SQL");
}
}
public class Test {
public static void main(String[] args) {
new JavaTeacher("張三", "清華").teaching();
new DBTeacher("李四", "清華").teaching();
}
}
輸出展示:父類通用準備 → 子類具體實現,完美體現「模板方法」思想。
this:當前對象引用,調用本類構造器(this())、訪問本類成員。super:父類對象引用,調用父類構造器(super())、訪問父類被覆蓋/隱藏成員。繼承配合 super 實現了「在子類中保留父類能力、擴展子類特性」的核心目標。掌握構造器鏈調用順序、成員訪問優先級,是寫出健壯繼承體系的前提。