public interface InterfaceDemo {
final String name = "this is my name"; // 未顯式聲明 public static
}
public class InterfaceImpl implements InterfaceDemo { }
public class MainDemo {
public static void main(String[] args) {
InterfaceImpl ii = new InterfaceImpl();
System.out.println(InterfaceDemo.name); // 路徑1:接口名.常量
System.out.println(ii.name); // 路徑2:實現類實例.常量
}
}
// 輸出均為:this is my name
根據 JLS(Java Language Specification),接口成員聲明具有以下隱式修飾符:
public static final(即編譯期常量)public abstract(JDK 8+ 允許 default/static/private 方法)因此 final String name = ... 等價於 public static final String name = ...。
| 路徑 | 語法 | 本質 | 適用場景 |
|---|---|---|---|
| 1. 接口直訪 | InterfaceDemo.name | 靜態字段訪問,編譯期常量折疊優化 | 工具類常量、配置鍵值、狀態碼定義 |
| 2. 實現類實例訪問 | implInstance.name | 繼承獲得的靜態字段訪問(不推薦,易混淆實例/靜態) | 遷移舊代碼、多態場景下統一訪問入口 |