1. 概要

このクイックチュートリアルでは、@Overrideアノテーションの使用方法を見ていきます。

2. @Overrideアノテーション

サブクラスでは、インスタンスメソッドをオーバーライドまたはオーバーロードできます。 オーバーライドは、サブクラスが継承された動作を置き換えていることを示します。 オーバーロードとは、サブクラスが新しい動作を追加するときです。

実際にオーバーライドしようとしたときに、誤って過負荷になることがあります。 Javaでこの間違いを犯すのは簡単です:

public class Machine {
    public boolean equals(Machine obj) {
        return true;
    }

    @Test
    public void whenTwoDifferentMachines_thenReturnTrue() {
        Object first = new Machine();
        Object second = new Machine();
        assertTrue(first.equals(second));
    }
}

驚いたことに、上記のテストは失敗します。 これは、この equalsメソッドがObject#equals をオーバーロードしており、オーバーライドしていないためです。

継承されたメソッドで@Overrideアノテーションを使用して、この間違いから保護することができます。

この例では、equalsメソッドの上に@Overrideアノテーションを追加できます。

@Override
public boolean equals(Machine obj) {
    return true;
}

この時点で、コンパイラはエラーを発生させ、equalsをオーバーライドしていないことを通知します。

次に、間違いを修正できます。

@Override
public boolean equals(Object obj) {
    return true;
}

誤ってオーバーロードするのは簡単なので、継承されたすべてのメソッドで@Overrideアノテーションを使用することをお勧めします。

3. 結論

このガイドでは、@OverrideアノテーションがJavaでどのように機能するかを見ました。

例の完全なソースコードは、GitHubにあります。