私は、Javaの@Overrideアノテーションは、コンパイル時にスーパークラスのメソッドを実際にオーバーライドしているかどうかをコンパイラにチェックして確認するようコンパイラに伝えるだけです。Javaで@Overrideアノテーションはどのように機能しますか?
私が読んだ記事から:https://dzone.com/articles/how-annotations-work-java。
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
この注釈の定義は、スーパークラスで同じメソッドシグネチャを探すために、コンパイラに伝えるには何のロジックを持っていない:
@Overrideアノテーション定義は、以下の単純です。
Javaコンパイラで定義されている同じメソッドシグネチャのスーパークラスを確認するロジックはありますか?
はい、そうです。 @Overrideで注釈が付けられたメソッドが実際に何もオーバーライドしない場合、コンパイルエラーが発生します。それは注釈の宣言の一部ではありません。 – f1sh
コンパイラはアノテーションをクロールするので、メソッドのシグネチャをチェックするロジックが最終的にコンパイラに関係することになります。また、保持ポリシーは、注釈がその後破棄されると述べているためです。 – Mena