Java接口修饰符详解
接口就是提供一種統(tǒng)一的”協(xié)議”,而接口中的屬性也屬于“協(xié)議”中的成員。它們是公共的,靜態(tài)的,最終的常量。相當(dāng)于全局常量。抽象類是不“完全”的類,相當(dāng)于是接口和具體類的一個中間層。即滿足接口的抽象,也滿足具體的實現(xiàn)。
接口是構(gòu)建松耦合軟件系統(tǒng)的重要法寶。
A、接口用于描述系統(tǒng)對外提供的所有服務(wù),因此接口中的成員常量和方法都必須是公開(public)類型的,確保外部使用者能訪問它們;
B、接口僅僅描述系統(tǒng)能做什么,但不指明如何去做,所以接口中的方法
都是抽象(abstract)方法;
C、接口不涉及和任何具體實例相關(guān)的細(xì)節(jié),因此接口沒有構(gòu)造方法,不能被實例化,沒有實例變量,只有靜態(tài)(static)變量。
D、接口的中的變量是所有實現(xiàn)類共有的,既然共有,肯定是不變的東西,因為變化的東西也不能夠算共有。所以變量是不可變(final)類型,也就是常量了。
E、接口中為什么不可以定義變量?如果接口可以定義變量,但是接口中的方法又都是抽象的,在接口中無法通過行為來修改屬性。有的人會說了,沒有關(guān)系,可以通過實現(xiàn)接口的對象的行為來修改接口中的屬性。這當(dāng)然沒有問題,但是考慮這樣的情況。如果接口 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)一的屬性。
通俗的講,你認(rèn)為是要變化的東西,就放在你自己的實現(xiàn)中,不能放在接口中去,接口只是對一類事物的屬性和行為更高層次的抽象。對修改關(guān)閉,對擴展(不同的實現(xiàn) implements)開放,接口是對開閉原則的一種體現(xiàn)。
所以:
接口的方法默認(rèn)是public abstract
接口中不可以定義變量即定義的變量前都要加上final修飾,使之成為常量(沒有final修飾的是變量,加上final修飾就會變成常量)。所以接口的屬性默認(rèn)是public static final 常量,且必須賦初值。
學(xué)會用接口:
例一:
實現(xiàn)接口,重寫方法
用接口類型接收參數(shù)
例二:
用接口類型接收
總結(jié)
以上是生活随笔為你收集整理的Java接口修饰符详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第四范式连续两年入选CB Insight
- 下一篇: shiro框架---关于多项目之间验证为