2014-03-24 16 views
0

我遇到了這個接口實現的例子,我無法理解,文本沒有任何推理的答案,所以希望這裏的某個人可以幫忙。接口實現訪問修飾符不像預期的那樣

鑑於接口

interface Flyer{ 
    void takeOff(); 
    boolean land(); 
} 

那麼假設我有一個實現如下

class Aeroplane implements Flyer{ 
    public void takeOff(){ 
    ... 
    } 
    //insert code here 
     return true; 
    } 
} 

的代碼插入,我給出的 public boolean land(){並指出,下列哪項不正確boolean land(){

爲什麼我需要在界面已定義時有public方法爲package-private,肯定boolean land(){應該實現接口,還是我錯過了什麼?

+0

Void不是布爾值。另外,接口是隱式公開的,這就是接口的要點。 –

+0

對不起,這是我的錯誤...編輯.. –

+2

「界面已定義方法作爲包私人」。在接口中聲明的方法根據定義是公共的。沒有辦法繞過它。 – aliteralmind

回答

3

「的接口定義的方法,包私人」

在接口聲明的所有方法定義公衆。這是沒有辦法的。

interface Flyer{ 
    void takeOff(); 
    boolean land(); 
} 

相當於該

interface Flyer{ 
    public void takeOff(); 
    public boolean land(); 
} 

這是非法

interface Flyer{ 
    private void takeOff(); 
    private boolean land(); 
} 

因爲是這樣的:

interface Flyer{ 
    protected void takeOff(); 
    protected boolean land(); 
} 

都不會編譯。

+0

感謝您的幫助! –

+0

是的,沒關係。這就是爲什麼我刪除了我的評論,希望你不會看到它。你的編輯更清晰。 – aliteralmind

4

接口沒有將方法定義爲包私有。所有由接口聲明的方法都是public。您對默認訪問修飾符感到困惑。這對於類來說確實是包私有的,但對於接口而言是public。因此,定義:

interface Flyer{ 
    void takeOff(); 
    void land(); 
} 

是絕對等同於

interface Flyer{ 
    public void takeOff(); 
    public void land(); 
} 
+0

感謝您的幫助! –