Java接口修饰符详解
接口就是提供一種統(tǒng)一的”協(xié)議”,而接口中的屬性也屬于“協(xié)議”中的成員。它們是公共的,靜態(tài)的,最終的常量。相當(dāng)于全局常量。抽象類(lèi)是不“完全”的類(lèi),相當(dāng)于是接口和具體類(lèi)的一個(gè)中間層。即滿足接口的抽象,也滿足具體的實(shí)現(xiàn)。
接口是構(gòu)建松耦合軟件系統(tǒng)的重要法寶。
A、接口用于描述系統(tǒng)對(duì)外提供的所有服務(wù),因此接口中的成員常量和方法都必須是公開(kāi)(public)類(lèi)型的,確保外部使用者能訪問(wèn)它們;
B、接口僅僅描述系統(tǒng)能做什么,但不指明如何去做,所以接口中的方法
都是抽象(abstract)方法;
C、接口不涉及和任何具體實(shí)例相關(guān)的細(xì)節(jié),因此接口沒(méi)有構(gòu)造方法,不能被實(shí)例化,沒(méi)有實(shí)例變量,只有靜態(tài)(static)變量。
D、接口的中的變量是所有實(shí)現(xiàn)類(lèi)共有的,既然共有,肯定是不變的東西,因?yàn)樽兓臇|西也不能夠算共有。所以變量是不可變(final)類(lèi)型,也就是常量了。
E、接口中為什么不可以定義變量?如果接口可以定義變量,但是接口中的方法又都是抽象的,在接口中無(wú)法通過(guò)行為來(lái)修改屬性。有的人會(huì)說(shuō)了,沒(méi)有關(guān)系,可以通過(guò)實(shí)現(xiàn)接口的對(duì)象的行為來(lái)修改接口中的屬性。這當(dāng)然沒(méi)有問(wèn)題,但是考慮這樣的情況。如果接口 A 中有一個(gè)public 訪問(wèn)權(quán)限的靜態(tài)變量 a。按照 Java 的語(yǔ)義,我們可以不通過(guò)實(shí)現(xiàn)接口的對(duì)象來(lái)訪問(wèn)變量 a,通過(guò) A.a = xxx; 就可以改變接口中的變量 a 的值了。正如抽象類(lèi)中是可以這樣做的,那么實(shí)現(xiàn)接口 A 的所有對(duì)象也都會(huì)自動(dòng)擁有這一改變后的 a 的值了,也就是說(shuō)一個(gè)地方改變了 a,所有這些對(duì)象中 a 的值也都跟著變了。這和抽象類(lèi)有什么區(qū)別呢,怎么體現(xiàn)接口更高的抽象級(jí)別呢,怎么體現(xiàn)接口提供的統(tǒng)一的協(xié)議呢,那還要接口這種抽象來(lái)做什么呢?所以接口中不能出現(xiàn)變量,如果有變量,就和接口提供的統(tǒng)一的抽象這種思想是抵觸的。所以接口中的屬性必然是常量,只能讀不能改,這樣才能為實(shí)現(xiàn)接口的對(duì)象提供一個(gè)統(tǒng)一的屬性。
通俗的講,你認(rèn)為是要變化的東西,就放在你自己的實(shí)現(xiàn)中,不能放在接口中去,接口只是對(duì)一類(lèi)事物的屬性和行為更高層次的抽象。對(duì)修改關(guān)閉,對(duì)擴(kuò)展(不同的實(shí)現(xiàn) implements)開(kāi)放,接口是對(duì)開(kāi)閉原則的一種體現(xiàn)。
所以:
接口的方法默認(rèn)是public abstract
接口中不可以定義變量即定義的變量前都要加上final修飾,使之成為常量(沒(méi)有final修飾的是變量,加上final修飾就會(huì)變成常量)。所以接口的屬性默認(rèn)是public static final 常量,且必須賦初值。
學(xué)會(huì)用接口:
例一:
實(shí)現(xiàn)接口,重寫(xiě)方法
用接口類(lèi)型接收參數(shù)
例二:
用接口類(lèi)型接收
總結(jié)
以上是生活随笔為你收集整理的Java接口修饰符详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 第四范式连续两年入选CB Insight
- 下一篇: Java面试——SpringMVC系列总