Java接口屬性修飾符為何不能是protected?

Java接口屬性修飾符為何不能是protected?

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
喜歡就支持一下吧
點贊12 分享