面試題:Java接口的修飾符可以分為()
A:private B:protected C:final D:abstract
答案:C,D
知識解析:注意以下幾條
1.接口用于描述系統(tǒng)對外提供的所有服務,因此接口中的成員常量和方法都必須是公開類型的,確保外部使用者能訪問它們;
2.接口僅僅描述系統(tǒng)能做什么,但不指明如何去做,所以接口中的方法都是抽象的方法;
3.接口不涉及和任何具體實例相關的細節(jié),因此接口沒有構造方法,不能被實例化,沒有實例變量,只有靜態(tài)變量;
4.接口的中的變量是所有實現(xiàn)類共有的,既然共有,肯定是不變的東西,因為變化的東西也不能算共有。所以變量時不可變類型,也就是常量了。
5.接口中不可以定義變量?如果接口可以定義變量,但是接口中的方法又是抽象的,在接口中無法通過行為來修改屬性。有的人會說,沒有關系,可以通過實現(xiàn)接口的對象行為來修改接口中的屬性。這當然沒有問題,但是考慮這樣的情況:如果接口中A中有一個public訪問權限的靜態(tài)變量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)。
所以接口方法默認是 public abstract;接口中不可以定義變量即只能定義常量。所以接口的屬性默認是public static final 常量,且必須賦初值。
注意:final和abstract不能同時出現(xiàn)。
更多Java知識,Java視頻,Java教程盡在動力節(jié)點Java培訓,關注動力節(jié)點官方微信,獲得一手Java面試題。