首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

《Java 編程思想》讀書筆記第 1 章:面向對象導論——抽象、封裝、繼承、多態核心哲學

     編輯:Java 綜合教學

Java 編程思想第一章精華:從機器模型到問題空間的思維進化

《Thinking in Java》開篇即確立核心主題:**編程語言演進本質是人類利用計算機解決問題的思維演進**。第 1 章「面向對象導論」以哲學高度定義 OOP 五大基石,本文提煉核心觀點並結合現代視角註釋。

一、抽象過程:從機器模型到問題模型

階段代表語言抽象對象核心限制
機器碼/匯編Machine Code硬體指令、暫存器、記憶體地址極度依賴硬體架構
命令式/過程式Fortran, C, Basic變量、函數、控制流 (機器模型的抽象)程序員需建立「機器模型 → 問題模型」映射,認知負擔重
特定問題導向Lisp, APL, SQL特定領域概念 (列表、陣列、關係)領域侷限,通用性差
面向對象Smalltalk, C++, Java, C#問題空間實體 (對象)提供表示問題元素的通用工具,語言適應問題

核心洞見:OOP 允許我們**向語言添加新類型**來適應特定問題,而非強迫問題適應語言內建類型。這是「擴展語言」而非「使用語言」的根本區別。

二、對象五大基本特性

  1. 萬物皆對象:將問題域實體建模為對象 (數據 + 行為)。
  2. 程序 = 對象集合 + 消息傳遞:對象間通過發送消息 (調用方法) 協作,而非數據流向驅動。
  3. 每個對象擁有私有存儲:由其他對象組成 (組合/聚合),實現封裝邊界。
  4. 每個對象擁有類型 (Class):類型決定對象能接收什麼消息 (介面)。
  5. 同類型對象接收相同消息:多態基礎——List<Animal> 可調用 animal.makeSound() 無需知悉具體子類。

三、對象三要素:狀態、行為、標識

  • 狀態:內部數據 (字段),可變或不可變。
  • 行為:方法 (操作狀態、返回結果、副作用)。
  • 標識:內存地址/唯一 ID,區分「同值」與「同引用」 (== vs equals())。

四、介面與實現分離

  • 類 = 介面 + 實現:介面定義「能做什麼」 (方法簽名),實現定義「怎麼做」 (方法體)。
  • 介面決定類型:List 介面定義 add/get/size,ArrayList/LinkedList 提供不同實現。
  • 面向介面編程:變量聲明用介面類型 List<String> list = new ArrayList<>();,解耦調用者與具體實現。

五、繼承:類型層次與代碼復用的雙重語義

維度繼承類型 (Is-a)組合/委派 (Has-a)
關係子類是父類的特化類包含組件對象
耦合度高 (破壞封裝,父類變更波及子類)低 (組件可替換)
復用方式繼承實現代碼 (protected 方法/字段)委派調用組件方法
設計原則里氏替換原則 (LSP) 必須滿足組合優於繼承 (GoF)

現代觀點:繼承主要用於**建立類型層次** (介面繼承/抽象類模板方法),**代碼復用優先用組合**。Java 單繼承限制強化了這一導向。

六、多態:面向介面編程的運行時綁定

核心機制

  • 向上轉型:Animal a = new Cat(); 子類引用賦值給父類變量。
  • 動態綁定:JVM 根據**對象實際類型** (非變量聲明類型) 選擇方法實現。
  • 消息發送:a.makeSound() 編譯期綁定 Animal.makeSound(),運行期分派到 Cat.makeSound()。

多態帶來的三大收益

  1. 解耦:調用者依賴抽象介面,不依賴具體實現類。
  2. 可擴展性:新增子類無需修改調用者代碼 (開閉原則)。
  3. 統一處理:集合存儲父類引用,統一遍歷調用,各對象自動執行專屬邏輯。

七、面向對象設計核心原則 (SOLID 雛形)

  • 單一職責:類只有一個變化原因。
  • 開閉原則:對擴展開放,對修改關閉 (多態、策略模式)。
  • 里氏替換:子類必須能無縫替換父類。
  • 介面隔離:多個專用介面優於單一臃腫介面。
  • 依賴倒置:高層模組依賴抽象,不依賴具體實現 (Spring IoC 體現)。

八、總結:OOP 思維地圖

問題空間實體
      ↓ 建模
對象 (狀態 + 行為 + 標識)
      ↓ 分類抽象
類 (介面 + 實現) ──→ 類型層次 (繼承/實現)
      ↓ 面向介面使用
多態 (動態綁定) ──→ 解耦、擴展、統一處理
      ↓ 組合裝配
系統架構 (高內聚、低耦合)

第一章雖無代碼,卻確立了 Java 程序員的**世界觀**:代碼不再是指令序列,而是**對象社區**;設計不再是函數分解,而是**類型層次與協作契約**的構建。這正是「Java 編程思想」的靈魂所在。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved