Respuestas:
@Override originalmente no estaba en el idioma. Cuando se sintió la necesidad de agregarlo, fue más fácil usar un mecanismo genérico (anotaciones) que agregar una nueva palabra clave al idioma. Agregar una nueva palabra clave siempre es un cambio incompatible, ya que puede romper los programas que usan esas palabras como identificador.
En los idiomas que agregan un marcador de anulación desde el primer día, a menudo es una palabra clave (por ejemplo, Kotlin y Scala), en Java se trataba de mantener la compatibilidad con versiones anteriores de Java que no tenían ningún marcador de anulación.
defaultya era una palabra clave reservada (utilizada en las declaraciones de cambio), solo le agregaron un nuevo uso. También hay algunas palabras clave que no hacen nada en este momento pero están reservadas para uso futuro (const, goto) - vea JLS §3.9
enumpalabra clave que se agregó rompería el código anterior. Más palabras clave de última hora aquí: stackoverflow.com/questions/16506411
No necesita la anotación @Override para anular realmente el comportamiento; Es una anotación porque simplemente agrega algo de contexto de la intención del método para el compilador, no cambia el método en sí.
Sin la anotación, puede tener la intención de anular la funcionalidad, pero accidentalmente no lo hace (mediante el uso de una firma ligeramente diferente). Agregar la anotación le dice al compilador que genere un error si este método no está anulando el comportamiento.
Como tal, tiene perfecto sentido como una anotación.