面向物件程式設計(OOP)是 Java 的靈魂。本文系統梳理類與物件的關係、封裝/繼承/多態三大特性的核心概念、方法與建構子的語法規則、參數傳遞機制、成員與區域變數的區別,並附上程式碼範例,幫助初學者快速建立扎實的 OOP 思維。
Person 類定義姓名、年齡等屬性,以及說話、走路等方法。new Person() 建立物件,每個物件擁有獨立的屬性值。類的結構:
public class Person {
// 屬性(成員變數)
private String name;
private int age;
// 方法(行為)
public void speak() {
System.out.println("我是 " + name + ",今年 " + age + " 歲。");
}
}
將屬性設為 private,對外提供 public 的 getter/setter 方法,控制存取權限,隱藏內部實現細節。
public class Person {
private String name; // 隱藏屬性
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
子類透過 extends 關鍵字繼承父類的非私有成員,實現程式碼複用與擴展。
public class Student extends Person {
private String studentId;
public void study() { System.out.println(name + " 正在學習。"); }
}
父類引用指向子類物件,執行時動態綁定子類重寫的方法。
Person p = new Student(); p.speak(); // 呼叫 Student 重寫後的 speak()
修飾符 回傳類型 方法名(參數列表) {
// 方法體
return 回傳值; // void 類型可省略或寫 return;
}
void 表示無回傳值;return 可提前結束方法。Java 採用值傳遞:基本類型傳值的副本;引用類型傳引用的副本(指向同一物件)。
| 比較項目 | 成員變數 | 區域變數 |
|---|---|---|
| 定義位置 | 類中、方法外 | 方法內、程式碼區塊內 |
| 記憶體位置 | 堆記憶體(隨物件) | 棧記憶體 |
| 預設初始值 | 有(0/null/false) | 無,必須顯式初始化 |
| 生命週期 | 隨物件建立/銷毀 | 隨方法進棧/出棧 |
專門用於初始化物件,名稱與類同,無回傳類型(連 void 也無)。
public class Person {
private String name;
// 無參建構子
public Person() { this("未知", 0); }
// 有參建構子
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
重點:若類未定義任何建構子,編譯器自動提供無參建構子;一旦自定義建構子,預設無參建構子消失,需手動補齊。
同一類中方法名相同、參數列表不同(類型、個數、順序至少一項不同),與修飾符、回傳類型無關。
public class Calculator {
public int add(int a, int b) { return a + b; }
public double add(double a, double b) { return a + b; }
public int add(int a, int b, int c) { return a + b + c; }
}
public static void main(String[] args) {
// JVM 啟動時呼叫此方法,作為程式執行起點
Person p = new Person("小明", 18);
p.speak();
}
掌握類與物件的關係、封裝/繼承/多態三大特性、方法與建構子語法、參數傳遞機制、變數作用域,即打下 Java OOP 堅實基礎。建議多動手寫代碼,體會「一切皆物件」的設計哲學。