接口是 Java 實現多態、解耦合約與實現的核心機制。本文通過完整項目結構與代碼示例,系統講解接口聲明規則、屬性隱式修飾符、繼承與多實現、包訪問權限控制、抽象接口與默認方法等核心知識點,並附帶常見編譯錯誤分析。
接口聲明與隱式修飾符
- 接口隱式
abstract,可顯式聲明 abstract interface
- 方法隱式
public abstract,不允許 protected/private,實現類方法必須 public
- 屬性隱式
public static final,必須初始化,不可修改(編譯期常量)
- 對象類型屬性同樣要求初始化,否則編譯錯誤
接口繼承:extends 而非 implements
- 接口只能
extends 接口,可多繼承:interface C extends A, B
- 類通過
implements 實現接口,可多實現:class D implements A, B, C
- 父接口同名同參方法,子類/實現類只需一個實現;若語義不同嚴禁同名,屬設計缺陷
包訪問權限對接口的影響
| 接口修飾符 | 同包類 | 不同包類 | 不同包子類 |
public | ✅ 可見/實現 | ✅ 可見/實現 | ✅ 可見/實現 |
| 默認(package-private) | ✅ 可見/實現 | ❌ 不可見 | ❌ 不可見 |
默認接口無法被不同包類繼承或實現,編譯將報錯「cannot find symbol」。
實現類的多態與抽象類中轉
- 實現類必須實現所有接口方法(除非繼承自已實現的父類)
- 若僅實現部分方法,類需聲明
abstract,交由子類完成
- 通過接口引用調用實現類方法,體現面向接口編程
項目結構示例
lession8/
├── Lession8.java // 主類,驗證接口屬性訪問
├── Test1.java // 實現同包接口 InterfaceSamePackage
├── Test2.java // 實現不同包 public 接口
├── Test3.java // 實現同包 abstract 接口
├── Test4.java // 多實現:InterfaceOtherPackagePublic, InterfaceSamePackageAbstract, InterfaceSamePackageExtends
├── Test5.java // abstract 類部分實現
├── InterfaceSamePackage.java // public 接口,含多種屬性聲明
├── InterfaceSamePackageAbstract.java // abstract 接口
├── InterfaceSamePackageExtends.java // 繼承三個接口
└── otherpackage/
├── InterfaceOtherPackagePublic.java // public 接口
└── InterfaceOtherPackageDefault.java // 默認接口
常見編譯錯誤自查清單
- 接口方法加
protected → Illegal modifier for the interface method; only public & abstract are permitted
- 修改接口常量(
Test1.Number2++) → The final field InterfaceSamePackage.Number2 cannot be assigned
- 接口對象屬性未初始化 →
The blank final field name may not have been initialized
- 不同包實現默認接口 →
InterfaceOtherPackageDefault is not visible
最佳實踐建議
- 接口命名用能力描述(
-able 後綴)或業務角色(Service、Repository)
- 常量定義在接口中僅作為規範常量,業務常量應放入專門的
Constants 類
- Java 8+ 可利用
default 方法提供默認實現,減少模板代碼,但需警惕菱形繼承衝突
- 公開 API 必須用
public interface,內部協議可用包私有接口封裝
徹底理解接口的語法規約、權限模型與多態實踐,是編寫高內聚、低耦合、可測試 Java 代碼的基石。
- 上一篇文章: Java 基礎培訓(九):控制台輸入處理與 Scanner 實戰
- 下一篇文章: Java 基礎培訓(七):構造器完整指南與初始化機制
Copyright ©
程式碼之家 All Rights Reserved