本文系統整理 Java 面向對象核心知識體系,涵蓋方法、建構子、重載、修飾符、繼承、多態、抽象類別、封裝、介面、包等十大主題,配合程式碼範例與表格總結,適合初學者建立完整觀念、資深開發者快速查閱。
修飾符 返回值類型 方法名(參數類型 參數名, ...) {
方法體;
return 返回值;
}
void 表示無返回值,最後 return 可省略public static void main(String[] args)同一類別中,方法名相同、參數列表不同(個數、型別、順序),與返回值無關:
int add(int a, int b) { return a + b; }
int add(int a, int b, int c) { return add(a, b) + c; }
double add(double a, double b) { return a + b; }
// void add(int a, int b) {} // 錯誤:僅返回值不同無法重載
public static void printNum(double... numbers) {
System.out.println("第一個:" + numbers[0]);
for (int i = 1; i < numbers.length; i++) {
System.out.println("其他:" + numbers[i]);
}
}
// 呼叫:printNum(1, 2, 9, 5, 8); 或 printNum(new double[]{1, 2, 6});
物件被 GC 回收前呼叫,用於清理資源(如關閉檔案)。不建議依賴,應使用 try-with-resources 或 AutoCloseable。
| 修飾符 | 同類 | 同包 | 子類(異包) | 非子類(異包) |
|---|---|---|---|---|
| public | ✓ | ✓ | ✓ | ✓ |
| protected | ✓ | ✓ | ✓ | ✗ |
| default (無) | ✓ | ✓ | ✗ | ✗ |
| private | ✓ | ✗ | ✗ | ✗ |
final:不可被繼承abstract:抽象類別,不可實例化,可含抽象方法static:類別變數,共享單一拷貝final:常數,僅能指派一次transient:序列化時忽略volatile:多線程可見性保證static:類別方法,無需實例呼叫final:不可被覆寫abstract:抽象方法,無方法體synchronized:同步鎖native:原生實現 (JNI)extends:單一繼承類別implements:實作介面,可多重super:參考父類成員、呼叫父類建構子this:參考當前物件、呼叫本類建構子super() 必須是第一行,與 this() 二擇一| 比較項 | 覆寫 | 重載 |
|---|---|---|
| 發生位置 | 父子類別 | 同一類別 |
| 方法名 | 相同 | 相同 |
| 參數列表 | 必須相同 | 必須不同 |
| 返回型別 | 相同或协变 | 可不同 |
| 存取權限 | 不得縮小 | 可任意 |
| 拋出異常 | 不得擴大 | 可任意 |
| 多態性 | 執行期多態 | 編譯期多態 |
Animal a = new Cat(); // 向上轉型 (隱式)
a.eat(); // 呼叫 Cat.eat()
Cat c = (Cat) a; // 向下轉型 (強制)
c.catchMouse(); // 呼叫 Cat 專有方法
abstract class:含抽象方法的類別必須宣告為 abstractpublic abstract 方法public static final (常數)implements 實作,可多重實作extends A, B)| 項目 | 抽象類別 | 介面 |
|---|---|---|
| 方法實作 | 可有非抽象方法 | Java 8 前不可,8+ 可 default/static |
| 欄位型別 | 任意 | 僅常數 |
| 靜態程式碼塊 | 可有 | 不可有 |
| 繼承關係 | 單繼承 | 多重實作 |
package com.example.util; → com/example/util/import pkg.* 或 import pkg.ClassNameJava 面向對象三大特性:封裝、繼承、多態。掌握修飾符存取規則、覆寫與重載差異、抽象類別與介面選型、包管理慣例,是寫出高內聚、低耦合、可維護 Java 代碼的基石。