面向過程(C 語言風格)以「步驟」為核心,資料與函數分離,規模增大時難以控制複雜度。面向物件(OOP)以「物件」為核心,將狀態(屬性)與行為(方法)封裝,透過訊息傳遞互動,實現模組化、資訊隱藏、程式碼復用,極大提升可維護性與擴展性。
物件 = 變數(狀態)+ 方法(行為)。
類別 = 同類物件共同特徵的抽象原型。class 定義屬性與方法,new Class() 實例化為物件。
Car 類別描述所有汽車共性;myCar = new Car() 創建具體物件。物件間互動唯一途徑。一條訊息包含:
接收者執行方法後可返回資訊(如儀表板顯示當前速度)。訊息機制支援跨執行緒、跨主機(RMI)互動。
private(類內)、default(套件內)、protected(子類/套件)、public(全域)。extends 一個父類),透過介面實現多重繼承效果,降低複雜度。
// 完整類別宣告
public abstract class Animal implements Serializable, Cloneable {
// 1. 類別宣告:修飾字 + class + 名稱 + extends/implements
// 2. 成員變數(屬性)
private String name;
protected int age;
public static final String KINGDOM = "Animalia";
// 3. 建構子
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
// 4. 方法(行為)
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public abstract void makeSound(); // 抽象方法,強制子類實現
public void printInfo() {
System.out.println(name + ", " + age + " 歲");
}
// 5. 內部類別、巢狀類別(後續章節詳述)
}
package com.company.project.module; 對應目錄結構。default/protected 套件可見)。import com.company.project.module.ClassName; 或 import com.company.project.module.*;。
public interface Drivable {
// 隱含 public static final
int MAX_SPEED = 300;
// 隱含 public abstract
void drive();
void stop();
// Java 8+ 預設方法(可選實現)
default void honk() {
System.out.println("Beep beep!");
}
// Java 8+ 靜態方法
static void checkLicense(String license) { /* ... */ }
}
// 實現介面
public class Car implements Drivable {
@Override public void drive() { /* ... */ }
@Override public void stop() { /* ... */ }
// 可選覆寫 honk()
}
介面定義「能做什麼」,類別定義「怎麼做」。一個類別可實現多個介面,實現多重型別身份。
// 1. 套件宣告(可選,建議有)
package com.example.domain;
// 2. 匯入陳述式
import java.io.Serializable;
import java.util.Date;
// 3. 類別/介面定義(可多個,但僅一個 public,檔名需與 public 類別同名)
public class Order implements Serializable {
// 類別主體...
}
// 非 public 類別可同檔案內定義
class OrderItem { /* ... */ }
| 概念 | 關鍵字/機制 | 核心價值 |
|---|---|---|
| 物件 | new, 實例 | 狀態+行為封裝單元 |
| 類別 | class, 建構子 | 物件藍圖、代碼復用基礎 |
| 封裝 | private, getter/setter | 資訊隱藏、介面穩定 |
| 繼承 | extends, super | 層次復用、IS-A 關係 |
| 多態 | implements, @Override | 介面統一、動態分派 |
| 套件 | package, import | 命名空間、存取控制 |
| 介面 | interface, default/static 方法 | 契約抽象、多重實現 |
掌握這些核心概念與語法,是邁向 Java 高手、設計優雅架構的必經之路。