abstract class,可包含抽象方法與具體方法、構造器、各類字段,單繼承;interface,Java 8 前僅含 public abstract 方法與 public static final 常量,支援多實現。| 維度 | 抽象類 | 接口 |
|---|---|---|
| 構造器 | ✅ 可定義(子類調用) | ❌ 不可定義 |
| 普通字段 | ✅ 任意修飾符 | ❌ 僅 static final |
| 非抽象方法 | ✅ 任意修飾符 | ❌ Java 8 前不可,Java 8+ default/static |
| 抽象方法訪問權限 | public/protected/default | 隱含 public |
| 靜態方法 | ✅ 支援 | Java 8+ static 支援 |
| 繼承/實現關係 | 單繼承 extends | 多實現 implements |
Comparable、Serializable、Runnable;HttpServlet、AbstractList)。public abstract class BaseServlet extends HttpServlet {
public final void service(HttpServletRequest req, HttpServletResponse resp)
throws IOException, ServletException {
// 1. 通用邏輯:日志、權限、編碼
logAccess(req);
if (!checkPermission(req)) return;
try {
// 2. 變化點委託子類
doService(req, resp);
} catch (Exception e) {
// 3. 統一異常處理
handleException(e, resp);
}
}
protected abstract void doService(HttpServletRequest req, HttpServletResponse resp)
throws IOException, ServletException;
// 通用輔助方法...
}
子類僅實現 doService,核心流程由父類 final 鎖定,兼顧擴展性與穩定性。
default 方法:提供默認實現,不破壞現有實現類,解決接口演進難題;static 方法:工具方法歸屬接口,如 Stream.of();Collection 接口 + AbstractCollection 類)。面試必考點:結合「語法差異 → 設計意圖 → 實戰選型」三層次回答,展現架構思維。