為什麼要向上轉型?避免為每個衍生類寫重載方法的噩夢
不向上轉型的代價:Music2 反面教材 class Instrument2 { void play(Note2 n) {} } class Wind2 ex
Java 方法綁定機制:早期綁定 vs 後期綁定,final 關鍵字的性能優化
綁定定義 將方法調用與方法體關聯的過程稱為綁定。 早期綁定(靜態綁定):編譯/鏈接階段完成。C 语言所有調用皆為早期綁定。 後期綁定(動態綁定/運行期
Java 多態實戰:Shape 體系與動態綁定的魔力
經典 Shape 例子 基類 Shape 定義通用協議:draw()、erase()。衍生類 Circle、Square、Triangle 覆寫實現具體行為。
Java 可擴展性設計:多態讓 tune() 不動如山
擴展性定義 無需修改既有代碼即可添加新功能。多態是關鍵:框架代碼只依賴基類接口,新類型繼承基類自動融入體系。 Music3 擴展演示 class Instr
Java 覆寫 vs 重載:方法簽名變更導致的多態失效陷阱
陷阱現場:WindError class InstrumentX { public void play(int NoteX) { println(Instru
Java 抽象類與抽象方法:強制契約與禁止實例化的編譯期保障
從「偽方法」到抽象方法 早期基類提供空方法體(偽方法),調用不報錯但無意義。抽象方法解決此問題: 只有聲明,無方法體:abstract void play
Java 「多重繼承」實現:接口組合 + 單類繼承的 Hero 模式
為什麼 Java 無類多重繼承? C++ 多重繼承因多類均有實現細節(狀態、方法體)導致菱形繼承、名稱衝突、構造順序等難題。Java 接口無實現細節、無狀態,合
Java 接口繼承:擴展接口與多接口合併語法
接口繼承接口:extends 關鍵字 接口可繼承多個基礎接口,合併方法聲明: interface Monster { void menace(); } int
Java 常數分組最佳實踐:接口常量 vs 類型安全枚舉模式
接口常量組:簡單但無類型安全 public interface Months { int JANUARY = 1, FEBRUARY = 2, ...
Java 接口字段初始化:隱式 static final、非常數表達式與類加載時機
接口字段本質 接口中定義的字段自動具備 static 和 final 屬性,即編譯期常數(但可非常數表達式初始化)。 非常數表達式初始化示例 public
Java 內部類入門:定義、實例化、外部類方法返回內部類引用
基本定義與使用 將類定義置於另一個類內部即為內部類。在外部類非靜態方法中,使用內部類與普通類無異: public class Parcel1 { cl
Java 內部類與上溯造型:隱藏實現細節的終極武器
為什麼光有 package-private 不夠? 包級可見性仍允許同包類依賴具體實現類。內部類配合上溯造型: 內部類設為 private/protect
Java 內部類核心機制:隱式外部引用與訪問權限全解析
內部類 vs C++ 嵌套類:本質區別 C++ 嵌套類僅是命名空間管理,無外部引用、無默認訪問權限。Java 內部類: 持有隱式引用指向創建它的外部類實例
Java 靜態內部類:不綁定外部實例、接口中定義、測試床模式
static 內部類的兩大特征 創建實例不需要外部類實例。 實例中不能訪問外部類非靜態成員(無 this 綁定)。 限制:不可有 static 成
Java 內部類訪問外部類引用:OuterClass.this 與創建內部類實例的正確語法
獲取外部類引用:OuterClass.this 內部類方法中,OuterClass.this 即為創建該內部類實例的外部類對象引用。編譯期類型檢查,運行期零開銷
Java 繼承內部類:特殊構造器語法與外部類引用綁定
問題:內部類構造器隱含外部類引用 內部類實例必須綁定一個外部類實例。繼承內部類時,衍生類構造器需顯式提供此綁定。 特殊語法:enclosingInstance