《Java 編程思想》被公認為 Java 程序員「必讀聖經」。本筆記記錄第一章核心觀點,結合生活化比喻(可樂瓶、皇帝繼位等)輔助理解,適合初學者建立 OOP 思維模型,也適合資深開發者回顧重構認知。
每種編程語言提供抽象機制。面向對象的抽象是抽象出對象。
對象 = 狀態 + 行為
可樂瓶:狀態=容量 600ml,行為=裝可樂()
顯示器:狀態=尺寸 27寸,行為=顯示圖像()
原子:狀態=原子核,行為=形成分子()
對象是「奇特的能量」:既存儲數據,又能在自身上執行操作。
理解關鍵:封裝數據與操作,而非分離的結構體+函數。
消息 = 方法調用請求。
打電話例子:你(對象) → 發送消息「打電話」 → 電話(對象) → 執行 dial() 方法。
程序運行本質:對象間相互調用方法完成任務。
組合/聚合關係:對象包含其他對象引用。
人對象包含:衣服對象、手機對象、心臟對象...
這就是「Has-a」關係,區別於「Is-a」繼承關係。
類 = 類型 = 對象模板。
老人/孩子類型都是「人」,美人魚類型是「魚」。
類型決定對象能接收什麼消息(擁有什麼方法)。
多態基礎:Person p = new Student(); p.walk();
只要類型是 Person,無論具體是 Student/Teacher/OldMan,都能調用 walk()。
接口由類型決定。類定義了對象能做什麼(方法簽名),對象只能響應接口定義的消息。
可樂類 KeLe 定義 zhuang() 方法 → 百事可樂對象只能「裝可樂」,不能「裝水」。
接口限制對象能力,保證契約一致性。
可樂配料(糖、水、色素)協作成就可樂服務。
軟件同理:將問題分解為一系列協作對象。
單一職責原則 (SRP):糖只負責甜,水只負責稀釋。對象只做一件事,做好一件事。
好處:高內聚、易理解、易復用、易測試。
| 角色 | 稱呼 | 關注點 |
|---|---|---|
| 創建新類型 | 類創建者 | 如何實現(演算法、數據結構、優化) |
| 使用類型 | 客戶端程序員 | 能做什麼(接口、參數、返回值) |
可樂配方保密:只告訴你「給糖水給可樂」,不告訴「加熱/冰鎮順序」。
兩大收益:
創建可樂類,實例化百事/可口可樂對象。對象復用。
套餐類包含:雞腿對象 + 小菜對象 + 可樂對象。
套餐類只知「我有什麼」,不知「它們怎麼實現」。
組合 = Has-a 關係(擁有關係)。動態組合稱聚合。
百事/可口可樂共同屬性:價格、容量。
若各自定義類 → 重複代碼 → 新增可樂類型需改動多處。
解決:提取父類 KeLe 含共同屬性/方法,子類繼承。
父類吃麵條,子類吃米飯。同樣是「吃飯」方法,實現不同。
多態:父類引用指向子類對象,調用重寫方法執行子類邏輯。
讀書心法:《Java 編程思想》不僅教語法,更教「思維」。用可樂、皇帝、套餐等生活隱喻建立模型:
對象 = 服務提供者
接口 = 契約
封裝 = 隱藏複雜度
繼承 = 分類體系(慎用)
組合 = 靈活拼裝(多用)
多態 = 統一接口、多樣實現