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 メソッドの名前を変えてコンパイルしてみましょう。
run → exe に変更します。
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 言語仕様もご参照ください。(英語になります)