1. 程式人生 > >Java介面修飾符詳解-可以修飾介面的修飾符

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 常量,且必須賦初值。