本文系統梳理 Java 面向對象編程 (OOP) 的十一大核心支柱,從哲學抽象到工程實踐,構建完整認知框架。
Dog d = new Dog() 中 d 的類型是 Dog。Teddy 和 Pomeranian 都是 Dog,均可調用 bark()。== 比較引用地址)。Fruit 類型。eat(), makeJuice() — 契約。Apple 剝皮吃,Pear 連皮吃 — 實現細節。| 修飾符 | 可見範圍 | 用途 |
|---|---|---|
public | 任意處 | 對外 API |
protected | 同包 + 子類 | 繼承體系擴展點 |
default (包私有) | 同包 | 模塊內部協作 |
private | 僅本類 | 內部實現細節隱藏 |
兩大動機: 1) 防止客戶端誤用內部細節 2) 允許庫作者在不破壞客戶端代碼前提下重構內部實現。
class Car { Engine engine = new Engine(); } // Car 擁有 Engine,生命週期綁定
class Company {
List employees; // 動態增減,Employee 可屬於多公司
void addEmployee(Employee e) { employees.add(e); }
}
class Circle extends Shape {
// 繼承 color、getColor/setColor、draw()
@Override void draw() { /* 圓特有繪製 */ }
}
Circle IS-A Shape → 向上轉型安全void drawShape(Shape s) { s.draw(); } // 參數為父類型
drawShape(new Circle()); // 調用 Circle.draw()
drawShape(new Square()); // 調用 Square.draw()
// 新增 Pentagon 無需修改 drawShape — 開閉原則
未知數量、生命週期、存儲需求 → 容器 (集合框架) 解決:
| 容器類型 | 接口 | 特徵 | 典型實現 |
|---|---|---|---|
| 列表 | List | 有序、可重複 | ArrayList (隨機訪問快), LinkedList (插刪快) |
| 集合 | Set | 無序、唯一 | HashSet, TreeSet (有序) |
| 映射 | Map | 鍵值關聯 | HashMap, TreeMap |
| 隊列 | Queue | FIFO | LinkedList, ArrayDeque |
| 棧 | Deque | LIFO | ArrayDeque |
性能選型: 隨機訪問用 ArrayList,頻繁頭尾插刪用 LinkedList/ArrayDeque。
Object 引用 → 取出需向下轉型 (不安全)List<Dog> 泛型限制編譯期類型,消除轉型、杜絕 ClassCastExceptionnew 在堆中動態分配,運行期才知數量/類型throw 拋出,catch 捕獲NullPointerException, NumberFormatException),不強制捕獲AutoCloseable 的資源synchronized (內部鎖)、Lock (顯式鎖)、volatile (可見性)、Atomic* (CAS 無鎖)
抽象建模 → 接口契約 → 服務分工 → 封裝邊界
↓
復用策略 (組合/聚合/繼承) → 多態替換 → 容器管理
↓
泛型類型安全 → 生命週期 (GC) → 異常物件化 → 併發協調
掌握這十一大支柱,不僅是會寫 Java 代碼,更是擁有了用對象思維建模現實世界、管理軟件複雜度的核心能力。