Câu trả lời:
@Override ban đầu không có trong ngôn ngữ. Khi cần thêm nó, việc sử dụng một cơ chế chung (chú thích) sẽ dễ dàng hơn so với việc thêm một từ khóa mới vào ngôn ngữ. Thêm một từ khóa mới luôn là một thay đổi không tương thích vì nó có thể phá vỡ các chương trình sử dụng các từ đó làm định danh.
Trong các ngôn ngữ có thêm dấu hiệu ghi đè ngay từ ngày đầu tiên, nó thường là một từ khóa (ví dụ là Kotlin và Scala), trong Java, vấn đề là tương thích ngược với phiên bản Java cũ hơn mà không có bất kỳ dấu hiệu ghi đè nào.
default
đã là một từ khóa dành riêng (được sử dụng trong các câu lệnh chuyển đổi) - họ chỉ thêm một cách sử dụng mới cho nó. Ngoài ra còn có một số từ khóa không làm gì ngay bây giờ nhưng được dành riêng cho sử dụng trong tương lai (const, goto) - xem JLS §3.9
enum
từ khóa được thêm vào sẽ phá vỡ mã cũ hơn. Nhiều từ khóa phá vỡ hơn tại đây: stackoverflow.com/questions/16506411
Bạn không cần chú thích @Override để thực sự ghi đè hành vi; Đó là một chú thích bởi vì nó chỉ đơn giản là thêm một số bối cảnh về ý định của phương thức cho trình biên dịch, không thay đổi chính phương thức đó.
Nếu không có chú thích, bạn có thể có ý định ghi đè chức năng, nhưng vô tình không thực hiện được (bằng cách sử dụng chữ ký hơi khác). Việc thêm chú thích sẽ cho trình biên dịch tạo ra lỗi nếu phương thức này không thực sự ghi đè hành vi.
Như vậy, nó có ý nghĩa hoàn hảo như một chú thích.