更新時間:2020-10-28 17:49:28 來源:動力節(jié)點 瀏覽1852次
在Java中,我們用interface關(guān)鍵字來聲明一個接口,Java接口修飾符通俗點來說,就是用來修飾interface關(guān)鍵字的。
Java接口本身默認是abstract的;可以是public的,也可以是friendly的,但不可以是private 的,不可以是protected的(否則通不過編譯)。
1)接口用于描述系統(tǒng)對外提供的所有服務(wù),因此接口中的成員常量和方法都必須是公開(public)類型的,確保外部使用者能訪問它們;
(2)接口僅僅描述系統(tǒng)能做什么,但不指明如何去做,所以接口中的方法都是抽象(abstract)方法;
(3)接口不涉及和任何具體實例相關(guān)的細節(jié),因此接口沒有構(gòu)造方法,不能被實例化,沒有實例變量,只有靜態(tài)(static)變量;
(4)接口的中的變量是所有實現(xiàn)類共有的,既然共有,肯定是不變的東西,因為變化的東西也不能夠算共有。所以變量是不可變(final)類型,也就是常量了。
(5) 接口中不可以定義變量?如果接口可以定義變量,但是接口中的方法又都是抽象的,在接口中無法通過行為來修改屬性。有的人會說了,沒有關(guān)系,可以通過 實現(xiàn)接口的對象的行為來修改接口中的屬性。這當然沒有問題,但是考慮這樣的情況。如果接口 A 中有一個public 訪問權(quán)限的靜態(tài)變量 a。按照 Java 的語義,我們可以不通過實現(xiàn)接口的對象來訪問變量 a,通過 A.a = xxx; 就可以改變接口中的變量 a 的值了。正如抽象類中是可以這樣做的,那么實現(xiàn)接口 A 的所有對象也都會自動擁有這一改變后的 a 的值了,也就是說一個地方改變了 a,所有這些對象中 a 的值也都跟著變了。這和抽象類有什么區(qū)別呢,怎么體現(xiàn)接口更高的抽象級別呢,怎么體現(xiàn)接口提供的統(tǒng)一的協(xié)議呢,那還要接口這種抽象來做什么呢?所以接口中 不能出現(xiàn)變量,如果有變量,就和接口提供的統(tǒng)一的抽象這種思想是抵觸的。所以接口中的屬性必然是常量,只能讀不能改,這樣才能為實現(xiàn)接口的對象提供一個統(tǒng) 一的屬性。
通俗的講,你認為是要變化的東西,就放在你自己的實現(xiàn)中,不能放在接口中去,接口只是對一類事物的屬性和行為更高層次的抽象。對修改關(guān)閉,對擴展(不同的實現(xiàn) implements)開放,接口是對開閉原則的一種體現(xiàn)。
所以:**接口的方法默認是public abstract;
接口中不可以定義變量即只能定義常量(加上final修飾就會變成常量)。所以接口的屬性默認是public static final 常量,且必須賦初值。
1.創(chuàng)建一個java 接口:
public interface TestInterface {
void say();
}
2.為這個接口添加一個abstract 修飾符
public abstract interface TestInterface {
void say();
}
結(jié)果一切正常,它的實現(xiàn)類運行毫不影響。由此可知java接口默認就是abstract的。
3、去掉這個接口的public 修飾符
interface TestInterface {
void say();
}
不報錯;同包下的實現(xiàn)類運行正常;異包下的實現(xiàn)類通不過編譯。由此可知java接口本身可以是friendly的(但不可以是private 和protected 的,這和類的聲明是一致的)。
4、為這個接口里的一個方法添加private 修飾符
public interface TestInterface {
private void say();
}
通不過編譯。由此可知java接口里的方法不可以是private 的。
5、為這個接口里的一個方法添加protected 修飾符
public interface TestInterface {
protected void say();
}
通不過編譯。由此可知java接口里的方法不可以是protected 的。
6、為這個接口里的一個方法添加abstract 修飾符
public interface TestInterface {
abstract void say();
}
一切正常,它的實現(xiàn)類運行毫不影響。由此可知java接口里的方法默認就是abstract的。
總的來說,Java接口修飾符除了用來修飾interface關(guān)鍵字,還可以判斷Java接口的默認方法。了解了Java接口修飾符,是不是還有更多的Java接口的問題亟需解決呢?快來本站的Java接口教程里尋找答案吧!