先說一下接口java
這個接口和tij 中以前繼承所說的接口還不是一個意思,父類和子類對外的接口一致,我的理解就是:spa
從外面能訪問到的方法,也能夠理解爲方法頭,好比 public void play() ,這個東西外面能訪問到。設計
而方法體是經過調用接口訪問到的。這個是廣義的接口code
而本次要提到的接口是一個類型。interface 這個關鍵字產生一個徹底抽象的類,它沒有提供任何具體實現。在interface中只提供了方法的表現形式(接口)而未提供任何具體實現。繼承
接口的意思是:全部實現了該接口的類看起來都是這樣。接口被用來創建類與類之間的協議.接口
建立一個接口,要用interface關鍵字替換class 關鍵字。注意:接口也能夠包含域,可是這些域隱式的是static 和 final的。interface不單單是一個極度抽象的類,人們經過它來建立一個可以io
要讓一個類遵循某個特定的接口或者一組接口,須要使用implements關鍵字,看起來像繼承,可是這個關鍵字表示,interface 只是它的外貌,我要聲明它是如何工做的。class
△△△注意:interface中的方法自動就是public的,即便不顯式的聲明。model
Why?權限
1. 語言的設計者可能以爲這增長了interface的access model的複雜度。
2. 負責實現接口的class的會很爲難,若是implementation和interface不在一個package下面,你該不應implement一個protected method呢?
好比說,在sample.interface
這個包下面有一個ISomething
。
package sample.interface; interface ISomething { protected foo1() { ... } }
那不在一個package下面的類使用這個接口會發生:
package a.place.of.nowhere; // some code tries to implements ISomething class SomethingImpl implements ISomething { // 抱歉,儘管你想implement foo1這個接口方法,可是因爲你在a.place.of.nowhere這個package,foo1()對你是不可見的。走人吧。 protected void foo1() {...}
這表示接口中的方法要擁有包外的訪問權限,因此在java中,即使不聲明,接口中的方法也是public的。