多態核心概念
多態允許將子類對象視為父類類型處理,「一個接口,多種實現」。編譯期綁定父類類型,運行期根據對象實際類型動態分派方法調用。
抽象類與抽象方法
- 包含抽象方法的類必須聲明為
abstract
- 抽象類不可實例化,旨在被繼承
- 子類必須實現所有抽象方法,否則子類也為抽象類
- 可無抽象方法也聲明
abstract,單純禁止實例化
- 抽象類可包含具體方法,支持代碼復用與重構(向上提取公共邏輯)
接口:完全抽象的契約
interface 產生完全抽象類,無任何實現
- 建立類之間的「協議」
- 實現多重接口繼承:一個類可實現多個接口,實現「多重繼承」變體
- 接口字段隱式
static final(常量)
- 實現接口後成為普通類,可繼承
- 接口方法實現必須
public
- 向上轉型對象:普通類、抽象類、接口無區別
完全解耦:策略模式與適配器模式
- 策略模式:方法包含固定算法骨架,策略接口封裝變化部分。通過傳入不同策略實現動態行為切換
- 適配器模式:構造器接收現有接口,產出目標接口對象。將不兼容接口適配為客戶端期望接口
Java 中的「多重繼承」
- 組合多個類接口稱為多重繼承
- Java 限制:僅一個類可有實現,其餘必須為接口
- 可向上轉型為每個接口(各自獨立類型)
- 語法:
class A extends ConcreteClass implements Interface1, Interface2 — 具體類在前,接口在後
- 若基類無方法定義/成員變量,優先選擇接口而非抽象類
接口繼承與組合
extends 通常單類,但接口間可 extends Interface1, Interface2 多繼承
- 組合多接口時同名方法易混淆,降低可讀性,需謹慎設計
適配接口
- 方法接受接口參數,即為任意實現類提供適配入口
- 接口使類結構與算法解耦
接口字段:常量定義工具
- 接口字段自動
static final
- 可用非常量表達式初始化(類加載時執行)
- 值存儲在接口的靜態存儲區,不屬於實例
嵌套接口
- 實現
private 接口:強制定義方法且不洩露類型信息
- 接口內嵌套接口自動
public,不可 private
- 實現外部接口不要求實現嵌套接口
private 接口僅定義類內部可實現
接口與工廠模式
- 工廠方法模式:調用工廠對象創建方法獲取接口實現,而非直接
new
- 理論上實現與客戶端代碼完全隔離,支持透明替換實現
- 引入間接層理由:構建框架、延遲綁定、運行時配置
總結指導原則
- 幾乎任何創建類的地方都可改為接口+工廠
- 抽象應由真實需求驅動,而非預防性設計
- 優先使用類,必要時重構為接口
- 從類開始,當接口必要性明確時再重構