2014-03-13 106 views
-1

我也許有一個簡單的問題。
這裏有兩個代碼片段來說明我的意思:接口實現差異

例1:

public interface SomeInterface{ 
    public void someMethod(...); 
} 

例2:

public interface AnotherInterface{ 
    void anotherMethod(...); 
} 

因此,例1是完全清楚的給我,但例2的心不是。

事實上,這兩個例子之間有什麼區別,期望public-modifier?

一方面我發現,從Interface小號方法都隱含public但另一方面,我發現,在Interface聲明的方法是「包公開」(我現在不如果多數民衆贊成在正確的描述) - 說這些對於與Interface相同的包中的所有類都可見。
現在我完全困惑..所以有人可以請解釋我最近怎麼樣?

謝謝反正。

+0

看到這個答案:http://stackoverflow.com/a/161787/4249 –

+0

也http://stackoverflow.com/questions/5418464/methods-visibility-in-interface –

+0

謝謝。爲什麼不只是搜索或谷歌給了我這個結果... 現在很清楚我。沒有區別,除了更多的內存浪費... –

回答

1

宣佈它是多餘的public。特別是JLS 9.4指出:

接口主體中的每個方法聲明都是隱式公開的(第6.6節)。

接口主體中的每個方法聲明都是隱式抽象的,所以它的主體總是用分號表示,而不是用塊表示。

對於在接口中聲明的方法,冗餘地指定公共和/或抽象修飾符是允許的,但不鼓勵作爲樣式。

1

所有接口方法是公共摘要和所有接口字段是公共靜態最終

所以在上面的例子中沒有區別。

1

接口中的所有方法都是公共的,並且可以在任何地方實現類。但是,如果接口本身是本地包(沒有修飾符 - 默認),那麼這些方法僅對同一包中的類/接口可見。但該方法仍然必須在執行類中公開

在上面的代碼中,沒有區別。但是如果它是:

interface AnotherInterface{ // Note no modifier - default modifier applied 
    void anotherMethod(...); 
} 

在這種情況下,接口僅在同一個包中可見。

注意:接口本身可以是包私有的,而不是其中的方法。您可以定義一個只能在其定義的包中使用(按名稱)的接口,但其方法像所有接口方法一樣是公共的。如果一個類實現了這個接口,它定義的方法必須是公共的。關鍵是這是接口類型,在包之外是不可見的,而不是方法。

+0

我相信這是不正確的。當然,接口本身可能是封裝私有的,但接口方法的每個實現都必須具有「public」訪問權限,使得所有代碼都可以訪問具體方法(當然,實現類本身是可訪問的),而不管接口。 –

+0

我編輯了答案以反映公共修飾符。是的,實施課程必須使用修飾語public。 – ucsunil