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

初級 202925

初級 203221

初級 202629

初級 203743