2017-11-25 6 views
2

私は等号を(再定義しなかったクラスMyClassを考える一方で@Overrideを言及するのを忘れ)とhashCode()メソッドは、しかし、私のようなキーワード@Override言及するのを忘れてしまった:再定義イコールとハッシュコード

public class MyClass { 
    public boolean equals(Object obj){ 
     //Content omitted 
    } 

    public int hashCode(){ 
     //Content omitted 
    } 

    //Remainder omitted 
} 

何だろうがそのような間違いがMyClassのデザインに及ぼす影響はありますか?

UPDATE:サブタイプのクラスで私の方法を再定義しながら、私はスーパークラスのメソッドのシグネチャを尊重するならば、私は@Overrideキーワードに言及していないですが、だから、私はまだ右、指定したメソッドをオーバーライドしますか?

+0

何もありません。 '@ Override'はコードの読者にスーパークラスのメソッドをオーバーライドするように指示する方法です。 – Sweeper

答えて

3

@Overrideアノテーションは、偶然の変更を防止します。 たとえば、 メソッドの名前を誤って変更した場合は、 と表示されているか、パラメータリストまたは戻り値の型が変更されている可能性があります。

注釈がない場合、 コンパイラは、このような変更の問題を発生させませんが、 プログラムは意図したとおりに機能しなくなる可能性があります。 このような変更によって引き起こされるバグを検出することは非常に難しいかもしれません。 たとえば、の代わりにObject.equalsが比較で使用されるため、等しいと思われる2つのインスタンス は同じではありません。

@Overrideアノテーションで、 コンパイラは、何かが間違っていたことを伝えることができるようになります、上記の変更のいずれかのような はおそらく親クラス内の任意の方法と一致していないメソッドの宣言、 につながりますこれはコンパイル時エラーです。

つまり

、 は@Override注釈を追加し、 場合でも、この例のように、オプション、 は、あなた自身の保護のためです。