繼承、多型、介面是 Java 物件導向的三大支柱。本文系統整理類別繼承機制、方法覆寫、介面契約、型別轉型規則,以及 this、super、null 三大特殊參考的運作原理。
non-private 欄位與方法。extends 一個父類別。java.lang.Object。import shapes.Rectangle;
public class FilledRect extends Rectangle {
// 自動擁有 width、height、getArea() 等
}
@Override
public void drawRect() {
for (int i = height; i > 0; i--)
System.out.println(makeString('#', width)); // 使用 StringBuilder 優化
}
private String makeString(char ch, int n) {
StringBuilder sb = new StringBuilder(n);
for (int i = 0; i < n; i++) sb.append(ch);
return sb.toString();
}
注意:子類別建構子必須呼叫 super(...) 初始化父類別狀態。
public abstract(Java 8+ 可有 default/static 實作)。public static final。implements 多個介面。public interface Shape {
void draw(); // 抽象方法
default void info() { System.out.println("Shape"); } // Java 8+ 預設實作
}
public class Circle implements Shape {
public void draw() { /* 繪製圓形 */ }
}
| 轉型方向 | 語法 | 檢查時機 | 風險 |
|---|---|---|---|
| 向上轉型 | Parent p = new Child(); | 編譯期自動 | 安全,無資訊遺失 |
| 向下轉型 | Child c = (Child) p; | 執行期檢查 | 可能拋 ClassCastException |
| 同層級轉型 | 不可直接轉換 | — | 編譯錯誤 |
安全模式:if (obj instanceof Child) { Child c = (Child) obj; }(Java 16+ 支援 pattern matching:if (obj instanceof Child c))
| 參考 | 意義 | 用途 |
|---|---|---|
null | 不指向任何物件 | 初始化參考、表示缺失值、方法參數允許空值 |
this | 指向目前物件實例 | 區分同名欄位/參數、傳遞自身參考、建構子鏈結 |
super | 指向父類別實例部分 | 呼叫父建構子 super(...)、存取被遮蔽的父類別成員 |
instanceof。