在 Java 的物件導向世界裡,類別 是核心構建單元。它不僅定義了物件的靜態結構(屬性)與動態行為(方法),更是封裝、繼承、多型等核心特性的載體。本文將從類別定義語法、核心組成、實例化機制、存取控制等維度,系統梳理 Java 類別結構的完整知識體系。
[修飾符] class 類別名稱 [extends 父類別名稱] [implements 介面列表] {
// 類別主體:欄位、方法、建構子、內部類、初始化區塊等
}
java.lang.Object(若未顯式 extends)。public(公開)、abstract(抽象)、final(不可繼承)、預設(包內可見)。private/protected/static。public class Rectangle extends Shape implements Drawable {
// 類別主體...
}
類別主體主要包含兩類成員,共同構成封裝的核心:
static 修飾,屬於物件實例,每個實例擁有獨立副本。static 修飾,屬於類別本身,全體實例共享單一副本。static final,命名慣例全大寫加底線(如 MAX_SIZE)。this。static 修飾,無 this,僅操作靜態狀態或工具邏輯。public class Rectangle {
// 實例變數(屬性)
private int width;
private int height;
// 建構子
public Rectangle(int width, int height) {
this.width = width;
this.height = height;
}
// 實例方法(行為)
public int getArea() {
return width * height;
}
// 存取器
public int getWidth() { return width; }
public void setWidth(int width) { this.width = width; }
}
super() 及當前類別建構子邏輯,完成自訂初始化。// 宣告引用變數 + 實例化 + 指派
Rectangle myRect = new Rectangle(10, 20);
// 存取成員:使用點運算子
myRect.setWidth(15);
int area = myRect.getArea(); // 300
棧區 堆區
┌──────────────┐ ┌─────────────────────┐
│ myRect ──────┼──────►│ Rectangle 物件 │
│ (引用變數) │ │ ├ width: 15 │
└──────────────┘ │ ├ height: 20 │
└─────────────────────┘
| 修飾符 | 同類 | 同包 | 子類(異包) | 非子類(異包) |
|---|---|---|---|---|
| private | ✓ | ✗ | ✗ | ✗ |
| default | ✓ | ✓ | ✗ | ✗ |
| protected | ✓ | ✓ | ✓ | ✗ |
| public | ✓ | ✓ | ✓ | ✓ |
最佳實踐:屬性私有化,提供公共存取器,實現資料隱藏與驗證控制。
{ ... },每次建構子執行前自動執行,可用於共享初始化邏輯。static { ... },類別載入時執行一次,用於靜態資源初始化。try-with-resources 或 AutoCloseable。Java 類別結構是物件導向程式設計的基石。精通類別定義語法、掌握封裝與存取控制原理、理解實例化記憶體模型、善用建構子與初始化區塊,是寫出高內聚、低耦合、可維護代碼的前提。隨著 Java 版本演進(如 Record、Sealed Class、Pattern Matching),類別機制持續增強,但核心哲學始終未變:**類別是行為與狀態的抽象封裝**。