回答:
@Overrideはもともと言語ではありませんでした。それを追加する必要性が感じられたとき、言語に新しいキーワードを追加するよりも一般的なメカニズム(注釈)を使用する方が簡単でした。新しいキーワードを追加すると、その単語を識別子として使用するプログラムが破損する可能性があるため、常に互換性のない変更です。
初日からオーバーライドマーカーを追加する言語では、キーワード(キーワードはKotlinやScalaなど)であることが非常に多いため、Javaでは、オーバーライドマーカーのない古いJavaバージョンとの下位互換性を維持する必要がありました。
default
はありません:既に予約済みのキーワード(switchステートメントで使用)でした-新しい使用法を追加しただけです。(定数、後藤)があり、今何もしないいくつかのキーワードでもありますが、将来の使用のために予約されている-を参照してJLS§3.9
enum
追加されたキーワードが古いコードを壊すことを覚えています。ここでさらに破壊的なキーワード:stackoverflow.com/questions/16506411
実際に動作をオーバーライドするために@Overrideアノテーションは必要ありません。メソッド自体を変更するのではなく、単にメソッドの意図のコンテキストをコンパイラに追加するだけなので、これは注釈です。
アノテーションがなければ、機能をオーバーライドしようとするかもしれませんが、誤ってそうすることに失敗します(わずかに異なる署名を使用することによって)。アノテーションを追加すると、このメソッドが実際に動作をオーバーライドしていない場合、エラーを生成するようコンパイラーに指示します。
そのため、注釈として完全に理にかなっています。