面試題:Java接口的修飾符可以分為()
A:private B:protected C:final D:abstract
答案:C,D
知識解析:注意以下幾條
1.接口用于描述系統(tǒng)對外提供的所有服務(wù),因此接口中的成員常量和方法都必須是公開類型的,確保外部使用者能訪問它們;
2.接口僅僅描述系統(tǒng)能做什么,但不指明如何去做,所以接口中的方法都是抽象的方法;
3.接口不涉及和任何具體實(shí)例相關(guān)的細(xì)節(jié),因此接口沒有構(gòu)造方法,不能被實(shí)例化,沒有實(shí)例變量,只有靜態(tài)變量;
4.接口的中的變量是所有實(shí)現(xiàn)類共有的,既然共有,肯定是不變的東西,因?yàn)樽兓臇|西也不能算共有。所以變量時(shí)不可變類型,也就是常量了。
5.接口中不可以定義變量?如果接口可以定義變量,但是接口中的方法又是抽象的,在接口中無法通過行為來修改屬性。有的人會說,沒有關(guān)系,可以通過實(shí)現(xiàn)接口的對象行為來修改接口中的屬性。這當(dāng)然沒有問題,但是考慮這樣的情況:如果接口中A中有一個(gè)public訪問權(quán)限的靜態(tài)變量a,通過A.a=XXX;就可以改變接口中的變量a的值。正如抽象類中是可以這樣做的,那么實(shí)現(xiàn)接口A的所有對象也都會自動擁有這一改變后的a的值了,也就是說一個(gè)地方改變了a,這寫對象中的a值也都跟著變了。這和抽象類有什么區(qū)別呢,怎么體現(xiàn)接口更高的抽象級別呢,怎么體現(xiàn)接口提供的統(tǒng)一的協(xié)議呢,那還要接口這種抽象來做什么呢?所以接口中不能出現(xiàn)變量,如果有變量,就和接口提供的統(tǒng)一的抽象這種思想是抵觸的。所以接口中的屬性必然是常量,只能讀不能改,這樣才能為實(shí)現(xiàn)接口的對象提供一個(gè)統(tǒng)一的屬性。
通俗的講,你認(rèn)為要變化的東西,就放在你自己的視線中,不能放在接口中去,接口只是對一類事物的屬性和行為更高層次的抽象。對修改關(guān)閉,對拓展開放,接口是對開閉原則的而一種體現(xiàn)。
所以接口方法默認(rèn)是 public abstract;接口中不可以定義變量即只能定義常量。所以接口的屬性默認(rèn)是public static final 常量,且必須賦初值。
注意:final和abstract不能同時(shí)出現(xiàn)。
更多Java知識,Java視頻,Java教程盡在動力節(jié)點(diǎn)Java培訓(xùn),關(guān)注動力節(jié)點(diǎn)官方微信,獲得一手Java面試題。