2012-03-15 3 views
-2

Eclipseでこれを試してみましたが、コンパイルエラーが表示されます。しかし、オンラインIDEで同じことを試してみたCompilrはエラーを示さなかった。それが混乱の理由です。実装されたクラスは、親インターフェイスで宣言されていないメソッドを持つことができますか?

interface Iclass{ 
    void print(); 
    void hey(); 
} 

class sdlfkajl implements Iclass { 
    public void print(){ 
    System.out.println("Impl class"); 
    } 
    public void hey(){ 
    System.out.println("Hey!"); 
    } 
    public void extra(){ 
    System.out.println("Should I be here?"); 
    } 
} 

エラーは、このクラスがインターフェイスで宣言されていないメソッドを持つことができないことを示しています。提案ツールチップは、このメソッドをインターフェイスで宣言する必要があるとも述べています。

+3

だからエラーは何ですか?私たちは推測する必要がありますか?あなたの質問への素早い答えは、途中ではいです。 –

+0

それは動作するはずです。コードに間違った概念はありません。 –

答えて

0

コードにエラーはありません。

あなたはエラーの警告を勘違いされるかもしれない - IntelliJのは、コードの警告として上にフラグを設定することができます。

警告がコンパイルに失敗するように設定することもできます。

IDEの設定を確認してください。

3

実装クラスは、親インターフェースで宣言されていないメソッドを持つことができますか?

はい、できます。

私はあなたの問題が何であるか分かりませんが、これはこれではありません。

0

どのようなエラーが発生したのかわかりませんが、インターフェイスの実装に追加のメソッドを追加することはできます。

0

もちろんのimplemented class缶は、そのinterfaceで宣言されていないメソッドを持っています。しかし、と宣言されていない限り、interfaceで宣言されているメソッドを実装するように拘束されています。

0

私が見ることができる唯一のエラーは、インターフェイスと実装が異なるパッケージにある場合です。あなたのインターフェースはデフォルトの可視性(「パッケージプライベート」とも呼ばれます)を持っています。つまり、同じパッケージ内でしか見ることができません。

public interface Iclass { 
} 

その他の点では、インタフェースに指定されていないクラスのメソッドがJavaでは完全に合法であることがあります。インターフェイスは契約であり、実装する必要があるメソッドです。しかし、それだけではありません。

0

同じシナリオを再現しようとしましたが、私の最後でうまくいきます。コードを消去してください。これはうまくいくかもしれません。ある可能性がありますあなたは、そのクラスのインタフェースで宣言されていないクラスにメソッドを追加することが許可されているインターフェースの可視性の問題

0

だろう。

私は定期的にEclipseを使用して、私はあなたに実行している問題は、Eclipse自体ではなく、あなたのコードに対処する必要があると思います。インターフェースを変更して保存すると、変更された行にエラーが表示されます。

変更されたメソッド全体を削除して、コードの再入力または貼り付けを試みてください。これにより、Eclipseが関連する作業領域をリフレッシュしてエラーを取り除く必要があります。

関連する問題