Java 類別繼承語法詳解:extends、覆寫與擴充介面
繼承的核心語法 繼承緊密結合於 Java。建立類別時若無明確繼承,將隱性繼承 Object。繼承語法:在類別主體前放置 extends 關鍵字,後接基底類別名稱
Java 基底類別初始化機制:super 呼叫與建構子鏈
衍生類別物件內含基底子物件 建立衍生類別物件時,其內部包含一個基底類別的「子物件」,如同直接依基底類別建立物件般。此子物件必須正確初始化,唯一保證方式是在建構子
合成與繼承的結合應用:PlaceSetting 綜合範例
同時運用兩大技術建構複雜類別 實務上常需結合合成與繼承。下例展示如何同時採用兩者,並完成必要的建構子初始化串聯。 //: PlaceSetting.java
確保 Java 物件正確清理:finally 區塊與明確清理模式
無解構子的語言設計 Java 沒有 C++ 風格的「解構子」。C++ 物件銷毀時自動呼叫解構子,Java 則仰賴垃圾收集器自動回收記憶體。但某些類別在生命週期中
Java 方法名稱隱藏機制:與 C++ 的關鍵差異與多載行為解析
從 C++ 轉向 Java 的開發者常對「名稱隱藏」行為感到驚訝。在 C++ 中,衍生類別定義同名方法會隱藏基底類別所有同名多載版本;但 Java 採取完全不同
合成與繼承抉择指南:is-a 與 has-a 的架構思維
核心差異:介面與實作的取捨 合成與繼承都能將子物件置入新類別,但選擇標準在於:是否需要暴露既有類別的介面。 選擇合成:想利用既有類別功能,但不想暴露其介面。在
Java protected 關鍵字深度解析:衍生類別的專屬訪問權
protected 的意義與定位 理解繼承概念後,protected 關鍵字才真正展現其價值。理想情況下,private 成員完全私有,任何外部代碼不可訪問。但
Java 向上轉型實戰:Instrument 與 Wind 的繼承關係與 tune() 多態調用
核心洞見:繼承表達「是一個」關係 Wind extends Instrument 表示:Wind 對象也是 Instrument 對象。基類所有方法衍生類自動擁
Java final 關鍵字完全指南:編譯期常數、空白 final、final 參數、對象引用不可變性
final 兩大核心場景 編譯期常數:基本類型、static final、編譯期可知值 → 編譯器內聯常數值。 運行期初始化不變值:final 字段在
Java final 方法深度解析:鎖定語義、內聯優化、private 隱式 final
兩大使用理由 語義鎖定:模板方法模式中骨架步驟、安全關鍵邏輯,防衍生類竄改。 性能優化:編譯器內聯調用點,消除壓棧/跳轉/返回開銷。 內聯優化細節
Java final 類:禁止繼承、隱式 final 方法與效率考量
final 類定義與效果 final class Dinosaur { int i = 7; void f() {} } // class Further e
Java final 方法使用誡:性能優化與擴展性封殺的雙刃劍
final 方法雙重動機 鎖定行為:防止衍生類覆寫改變語義。 性能優化:編譯器可內聯調用,消除方法調用開銷。 濫用 final 的代價:Vecto
Java clone() 綜合練習:字符串封裝、電池玩具深拷貝、異常處理、性能分析、Snake 深拷貝
練習 1:myString 可變字符串與 clone() class MyString implements Cloneable { private
Java 類加載與初始化:按需加載、靜態初始化一次性執行、避免 C++ 靜態初始化順序災難
C++ 痛點:靜態初始化順序未定義 跨文件靜態對象初始化順序不可控,若 A 初始化依賴 B 且 B 尚未初始化 → 災難。需人工精心控制。 Java 解決方案
Java 繼承初始化全流程:靜態初始化、基類構造、成員初始化、衍生構造
Beetle 繼承 Insect 完整追蹤 class Insect { int i = 9; int j; Insect() { prt(i