462

インターフェイス メソッドを実装するメソッドには、アノテーションを付ける必要があり@Overrideますか?

注釈javadoc は次のOverrideように述べています。

メソッド宣言が、スーパークラスのメソッド宣言をオーバーライドすることを意図していることを示します。メソッドにこの注釈型の注釈が付けられているが、スーパークラス メソッドをオーバーライドしていない場合、コンパイラはエラー メッセージを生成する必要があります。

インターフェイスが技術的にスーパークラスだとは思いません。またはそれは?

Question Elaboration

4

15 に答える 15

327

可能な限り @Override を使用してください。単純なミスを防ぎます。例:

class C {
    @Override
    public boolean equals(SomeClass obj){
        // code ...
    }
}

を適切にオーバーライドしないため、これはコンパイルされませんpublic boolean equals(Object obj)

インターフェイスを実装するメソッド ( 1.6 以降のみ) またはスーパー クラスのメソッドをオーバーライドするメソッドについても同様です。

于 2008-10-17T15:21:31.270 に答える
114

javac の動作が変更されたと思います。1.5 ではアノテーションが禁止されていましたが、1.6 では禁止されていません。注釈は追加のコンパイル時のチェックを提供するので、1.6 を使用している場合はそれを使用します。

于 2008-10-17T15:28:03.800 に答える
17

私はあらゆる機会にそれを使用します。Java の @Override アノテーションを使用する場合とその理由を参照してください。

于 2008-10-17T15:27:35.410 に答える
11

@OverrideJDK 5.0 では、インターフェイスで宣言されたメソッドを実装している場合 (コンパイル エラー)、アノテーションを使用できませんが、JDK 6.0 では使用できます。したがって、要件に応じてプロジェクトの設定を構成できる場合があります。

于 2009-06-08T12:01:31.633 に答える
6

具象クラスが抽象メソッドをオーバーライドしていない場合、実装@Overrideに使用することは未解決の問題です。これは、コンパイラが実装されていないメソッドについて常に警告するためです。このような場合、可読性を損なうという議論をすることができます。コードを読むことが多くなり、程度は低くなりますが、呼び出されてではありません。@Override@Implement

于 2015-12-19T00:48:57.817 に答える
3

JDK の問題ではありません。Eclipse Helios では、JDK 5 または 6 のどちらでも、実装されたインターフェース メソッドに対して @Override アノテーションを使用できます。Eclipse Galileo に関しては、JDK 5 または 6 のいずれでも @Override アノテーションは使用できません。

于 2010-12-03T05:50:18.937 に答える
3

独自のクラスから継承された独自のメソッドをオーバーライドしても、通常、IDE を使用したリファクタリングで中断することはありません。ただし、ライブラリから継承したメソッドをオーバーライドする場合は、それを使用することをお勧めします。そうしないと、後のライブラリの変更でエラーが発生しないことがよくありますが、よく隠れたバグが発生します。

于 2008-10-17T21:16:36.157 に答える
2

を含めることの問題は、メソッド@Overrideを呼び出すのを忘れたと思わせることであり、非常に混乱します。これは非常に明確なはずです。おそらく Java は、ここで使用される を提供する必要があります。まあ、また中途半端な Java の特性が…super.theOverridenMethod()@Interface

于 2014-03-19T20:47:38.203 に答える
2

Java 6 以降のバージョンでは@Override、インターフェイスを実装するメソッドに使用できます。

しかし、私はそれが意味をなさないと思います.オーバーライドは、スーパークラスにメソッドがあり、それをサブクラスに実装していることを意味します.

@Implementインターフェイスを実装している場合は、 またはを使用する必要があると思いますが、 @Override.

于 2016-09-28T06:57:31.920 に答える
1

@Overrideインターフェイスを実装するクラスの作成中に「実装されていないメソッドを生成する」ように指示すると、Eclipse自体が注釈を追加します。

于 2008-10-17T21:19:32.017 に答える
0

これは遅すぎる答えかもしれません。しかし、この例がなぜそれほど重要なのかを誰かが理解するのに役立つことを願って@overrideいます (このようなシナリオの場合)

public interface Restaurant(){
    public boolean getBill();
    public BigDecimal payAmount();
}

public interface Food() extends Restaurant{
    public boolean haveSomeFood();
    public boolean drinkWater();
}

public class Hungry() implements Food{
    public boolean haveSomeFood(){}
    public boolean drinkWater(){}
    public boolean getBill(){}
    public BigDecimal payAmount(){}
}

上記の例では、もし私Hungryが しかし、レストランの実装を取り出せば、請求書を取得する必要はなく、金額を支払う必要もありません!!!!FoodRestaurant

どのように?

  • インターフェイスFoodにはキーワードがありextends Restaurantます。これは、クラス Hungry もインターフェイス Restaurant から実装されていることを意味します。
  • インターフェイスから実際にオーバーライドされるメソッドには、キーワードがありません@override
  • そのため、キーワード extends Restaurant を削除すると (またはインターフェイス Restaurant を削除すると、エラーは表示されません。

があった場合@override、Restaurant インターフェイスを削除しようとすると、コンパイル エラーが表示されます。

: インターフェースを実装する場合、そのインターフェースが別のインターフェースに拡張されているのか、拡張可能なのか、継承が削除されているのかがわからない場合があります。したがって、常に@overrideキーワードを使用することをお勧めします

于 2022-01-25T20:51:46.207 に答える