Java接口屬性的訪問修飾符詳解:為什么必須是public Static final?
許多Java開發者認為接口中的屬性必須聲明為public static final。但如果嘗試在接口中使用protected修飾符定義屬性,會發生什么?
以下代碼片段展示了一個名為runner的接口,其屬性id使用了protected修飾符:
public interface runner { int id = 1; public void start(); public void run(); public void stop(); }
這段代碼編譯會失敗。這是因為Java語言規范明確規定,接口中的屬性必須是public static final的。protected修飾符在這里是無效的,因為它試圖限制接口成員的訪問權限。而接口成員默認就是public的,因此protected修飾符在此處是多余且錯誤的。
立即學習“Java免費學習筆記(深入)”;
正確的寫法應該是:
public interface Runner { public static final int id = 1; public void start(); public void run(); public void stop(); }
雖然public和static可以省略(因為它們是接口成員的默認修飾符),但final是必須的。這是因為接口中的變量必須是常量,final關鍵字保證了這一點,防止其值在實現類中被修改。
因此,最初代碼片段中protected修飾符的出現,是由于代碼編寫錯誤造成的。 接口屬性的本質是全局常量,其訪問權限必須是完全開放的,這與protected修飾符的訪問限制相沖突。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END