2012-10-31 35 views
11

當我編譯此代碼:的Java收到錯誤執行接口方法較弱的訪問

interface Rideable { 
    String getGait(); 
} 

public class Camel implements Rideable { 
    int x = 2; 

    public static void main(String[] args) { 
     new Camel().go(8); 
    } 

    void go(int speed) { 
     System.out.println((++speed * x++) 
     + this.getGait()); 
    } 

    String getGait() { 
     return " mph, lope"; 
    } 
} 

我收到以下錯誤:

Camel.java:13: error: getGait() in Camel cannot implement getGait() in Rideable 
String getGait() { 
    ^
    attempting to assign weaker access privileges; was public 
1 error 

在考慮界面如何被聲明的getGait方法上市?

+5

方法隱含'public'。這就是語言的工作原理。對於實現此接口的類,它必須明確地說明方法的訪問修飾符。在你的情況下,'String getGait()'是'protected',因此是錯誤信息。 – mre

+0

這個錯誤是不言自明的,你需要在類Camel中公開getGait()。 – Shark

+0

@mre ... getGait方法實際上具有默認可見性... package-private ...不受保護。 –

回答

28

在接口中聲明的方法隱含地爲public。並且在界面中聲明的所有變量都是隱式的public static final(常量)。

public String getGait() { 
    return " mph, lope"; 
} 
3

interface所有方法都隱含public。但是在課堂內部,如果沒有明確提到公開,它只有包裝可視性。通過壓倒一切,你只能增加知名度。你不能降低能見度。因此,修改的getGait()實施在類如駱駝在接口中聲明

public String getGait() { 
    return " mph, lope"; 
}