広告

Java : @Override (アノテーション) - API使用例

Override (Java SE 20 & JDK 20) の使用例まとめです。
メソッドをオーバーライドするときに使うアノテーションです。

API仕様のおともにどうぞ。


概要

メソッド宣言がスーパー・タイプのメソッド宣言をオーバーライドすることを示します。 メソッドにこの注釈型が付けられている場合、少なくとも次のいずれかの条件が成立しないかぎり、コンパイラはエラー・メッセージを生成する必要があります。

クラス構成

@Override アノテーションは、ベースとなるクラス、またはインタフェースのメソッドをオーバーライドすることを明示します。

public class Base {
    public void run() {
        System.out.println("Base : run!");
    }
}

public class Foo extends Base {
    @Override
    public void run() {
        System.out.println("Foo : run!");
    }
}
public class Main {
    public static void main(String[] args) {
        final var foo = new Foo();
        foo.run();
    }
}

// --- PowerShell ---
//PS R:\java-work> ls -Name
//Base.java
//Foo.java
//Main.java
//
//PS R:\java-work> javac *.java
//
//PS R:\java-work> java Main
//Foo : run!

もし、@Override を使って、存在しないメソッドをオーバーライドしようとすると コンパイルエラー になります。

これは @Override を使う大きなメリットです。
なぜなら、プログラムを実行する前 … コンパイルの時点でコードの間違いに気づけるからです。

問題は早期発見、早期解決が鉄則です。

試しに、先ほどの Foo クラスの run メソッドの名前を変えてコンパイルしてみましょう。
runexe に変更します。

public class Foo extends Base {
    @Override
    public void exe() {
                ^^^ <---- 変更!
        System.out.println("Foo : exe!");
    }
}

// --- PowerShell ---
//PS R:\java-work> javac *.java
//Foo.java:4: エラー: メソッドはスーパータイプのメソッドをオーバーライドまたは実装しません
//    @Override
//    ^
//エラー1個

想定どおり、コンパイルエラーになりました。
特に明確な理由がない限りは、メソッドをオーバーライドするときは @Override で明示することをおすすめします。

さらに詳細が知りたいかたは、下記の Java 言語仕様もご参照ください。(英語になります)


関連記事

ページの先頭へ