繼承是面向對象最顯著特征,從現有類派生新類,子類吸收父類屬性行為並擴展新能力。技術本質: 以現有類定義為基礎建立新類,新類可增數據/功能、用父類功能,但不能選擇性繼承。
Car:車體、顏色、方向盤、輪胎Sedan:添加小後備箱Truck:添加大貨箱UML 中實線空心三角箭頭指向父類。父類 = 一般化,子類 = 特化/具體化。
extends),結構清晰易維護。implements 多個接口,彌補單繼承局限。// 父類 A
class A {
int num = 0;
public A(int i) {
System.out.println("aaaaaaaaaaaaaaaaaaa");
System.out.println("i = " + i);
num = i;
}
}
// 子類 B 繼承 A
class B extends A {
int num = 0; // 遮蔽父類同名字段
public B() {
super(10); // 必須首行調用父構造器
System.out.println("bbbbbbbbbbbbbbbbbbbb");
System.out.println("num = " + num); // 子類 num (0)
System.out.println("super.num = " + super.num); // 父類 num (10)
}
}
// 測試類
public class C {
public static void main(String[] args) {
new B();
}
}
輸出:
aaaaaaaaaaaaaaaaaaa
i = 10
bbbbbbbbbbbbbbbbbbbb
num = 0
super.num = 10
super(...) 必須在構造器首行顯式調用父構造器。super.字段 訪問父類。private) 不被繼承,但子類對象內存中仍包含,可通過父類公共方法間接訪問。「繼承之美如宇宙萬物關聯」。良好繼承設計關鍵在於抽象、分類、設計:將共性上移父類,差異下放子類。狗與窗口同繼承
Window看似荒謬,實則體現「可視化組件」共性抽象。優秀設計 = 可復用代碼管理相關子對象。
繼承非銀彈,濫用導致脆弱基類問題。實戰中遵循「里氏替換原則」:子類必須能替換父類不破壞業務語義。組合優於繼承,靈活構建更勝僵硬層次。