Java 不支援多重繼承(一個類別只能有一個直接父類別),但可透過實作多個介面達成類似效果。介面定義語法:
[介面修飾詞] interface 介面名 [extends 父介面列表] {
// 介面主體:常數與抽象方法
}
public static final,必須初始化。public abstract(Java 8 起可有 default/static 方法)。Java 變數分三類,作用域依宣告位置而異:
| 類型 | 宣告位置 | 作用域 | 備註 |
|---|---|---|---|
| 靜態成員變數(類別變數) | 類別中,static 修飾 | 全域:類別載入時建立,程式結束銷毀 | 透過類別名或實例存取 |
| 非靜態成員變數(實例變數) | 類別中,無 static | 類別級:實例建立時建立,實例銷毀時回收 | 需透過實例存取;非靜態方法可直接存取 |
| 區域變數 | 方法、建構子、區塊內 | 區塊級:從宣告處開始至區塊結束 | 包含參數與方法內區域變數;無預設值,必須手動初始化 |
同名遮蔽:區域變數優先於成員變數(就近原則);不同方法可重複使用相同區域變數名。
Java 唯一支援值傳遞。呼叫時,引數的值被複製給參數變數:
類比 C 指標:傳遞參考值類似傳遞指標,可修改所指物件,但無法修改指標本身(即無法讓原變數指向新物件)。
void swap(Obj a, Obj b) {
Obj temp = a; // 僅交換區域參考
a = b;
b = temp;
}
// 呼叫端物件參考不會改變
若需在方法中修改呼叫端的參考,可改用包裝類別、陣列/集合或回傳新物件。