Java接口修飾符詳解


接口就是提供一種統一的”協議”,而接口中的屬性也屬於“協議”中的成員。它們是公共的,靜態的,最終的常量。相當於全局常量。抽象類是不“完全”的類,相當於是接口和具體類的一個中間層。即滿足接口的抽象,也滿足具體的實現。

 

接口是構建松耦合軟件系統的重要法寶。

 

A、接口用於描述系統對外提供的所有服務,因此接口中的成員常量和方法都必須是公開(public)類型的,確保外部使用者能訪問它們;

 

B、接口僅僅描述系統能做什么,但不指明如何去做,所以接口中的方法

都是抽象(abstract)方法;

 

C、接口不涉及和任何具體實例相關的細節,因此接口沒有構造方法,不能被實例化,沒有實例變量,只有靜態(static)變量。

 

D、接口的中的變量是所有實現類共有的,既然共有,肯定是不變的東西,因為變化的東西也不能夠算共有。所以變量是不可變(final)類型,也就是常量了。

 

E、接口中為什么不可以定義變量?如果接口可以定義變量,但是接口中的方法又都是抽象的,在接口中無法通過行為來修改屬性。有的人會說了,沒有關系,可以通過實現接口的對象的行為來修改接口中的屬性。這當然沒有問題,但是考慮這樣的情況。如果接口 A 中有一個public 訪問權限的靜態變量 a。按照 Java 的語義,我們可以不通過實現接口的對象來訪問變量 a,通過 A.a = xxx; 就可以改變接口中的變量 a 的值了。正如抽象類中是可以這樣做的,那么實現接口 A 的所有對象也都會自動擁有這一改變后的 a 的值了,也就是說一個地方改變了 a,所有這些對象中 a 的值也都跟着變了。這和抽象類有什么區別呢,怎么體現接口更高的抽象級別呢,怎么體現接口提供的統一的協議呢,那還要接口這種抽象來做什么呢?所以接口中不能出現變量,如果有變量,就和接口提供的統一的抽象這種思想是抵觸的。所以接口中的屬性必然是常量,只能讀不能改,這樣才能為實現接口的對象提供一個統一的屬性。

 

通俗的講,你認為是要變化的東西,就放在你自己的實現中,不能放在接口中去,接口只是對一類事物的屬性和行為更高層次的抽象。對修改關閉,對擴展(不同的實現 implements)開放,接口是對開閉原則的一種體現。

 

所以:

接口的方法默認是public abstract

接口中不可以定義變量即定義的變量前都要加上final修飾,使之成為常量(沒有final修飾的是變量,加上final修飾就會變成常量)。所以接口的屬性默認是public static final 常量,且必須賦初值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM