爲何接口中的方法都是public的?

先說一下接口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的。

相關文章
相關標籤/搜索