2012-10-31 12 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

メソッドとしてクラスラクダにgetGait()の実装を変更暗黙のうちに 'public'です。それが言語の仕組みです。このインタフェースを実装するクラスでは、メソッドのアクセス修飾子について明示的に指定する必要があります。あなたのケースでは 'String getGait()'は 'protected'なので、エラーメッセージです。 – mre

+0

このエラーは自明ですが、CamelクラスのgetGait()をpublicにする必要があります。 – Shark

+0

@mre ... getGaitメソッドは実際にはデフォルトの可視性を持っています... package-private ... protectedではありません。 –

答えて

8

interfaceのすべてのメソッドは、明示的に宣言するかどうかにかかわらず、暗黙的にpublicです。詳細はJava Tutorials Interfaces sectionをご覧ください。

28

インターフェイス内で宣言されたメソッドは暗黙的にpublicです。そして、インタフェースで宣言されたすべての変数は暗黙的にpublic static final(定数)です。

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

interfaceのすべてのメソッドは、暗黙的にpublicです。しかし、クラス内でpublicが明示的に言及されていない場合は、パッケージの可視性のみを持ちます。オーバーライドすることで、可視性を向上させることができます。可視性を下げることはできません。だから、インタフェースで宣言

public String getGait() { 
    return " mph, lope"; 
} 
関連する問題