@Override注解的核心作用是编译期校验方法是否真正重写父类或接口中的方法,防止伪重写、拼写错误和签名不匹配,并提升代码可读性与可维护性。

@Override 注解是 Java 提供的一个编译期检查工具,它的核心作用是告诉编译器:“我打算重写父类(或接口)中的某个方法”。一旦加了这个注解,编译器就会严格比对:你写的这个方法签名是否真的在父类/接口中存在、是否满足重写规则。如果不满足,立刻报错,帮你提前发现拼写错误、参数类型不对、返回值不兼容等常见问题。
什么时候必须加 @Override?
只要你在子类中明确想重写父类的非 private、非 static 方法,或者实现接口中的默认方法、抽象方法,就建议加上 @Override。它不是语法强制要求,但加了就能获得编译器保护。
- 重写父类的 public 或 protected 实例方法(比如重写
toString()、equals(Object)) - 实现接口中定义的抽象方法(如
Runnable.run()) - 重写接口中的 default 方法(Java 8+)
不加 @Override 容易踩哪些坑?
没加注解时,编译器不会验证你是不是真在重写——哪怕方法名拼错了、参数少写了一个 int,它也当你是“新写了一个同名方法”,静默通过。运行时自然不会调用到你期望的方法,bug 难以察觉。
-
拼写错误:把
toString()写成toStirng(),不加 @Override 就不会报错 -
参数类型不一致:父类是
setValue(String s),你写了setValue(Object o),其实是重载而非重写 -
返回值不协变:父类返回
Object,你返回String是合法的(协变返回),但若返回Integer就不合法;@Override 会帮你拦住后者
怎么正确使用 @Override?
直接写在方法声明上方,和访问修饰符(如 public)在同一行或上一行都可。注意它不能用于构造方法、static 方法、private 方法,也不能用于实现接口的 default 方法以外的静态接口方法(Java 8+ 接口里 static 方法不能被重写)。
- ✅ 正确:重写
Object.toString() - ❌ 错误:给构造方法加 @Override(编译失败)
- ❌ 错误:给 private 方法加 @Override(编译失败,private 方法不可见、不可重写)
- ✅ 正确:实现接口的 abstract 方法或 default 方法
IDE 通常能自动帮你补全 @Override
在 IntelliJ IDEA 或 Eclipse 中,按快捷键(如 IDEA 的 Ctrl + O)打开“Override Methods”面板,选择要重写的方法,IDE 会自动生成带 @Override 的方法骨架。这既省事,又确保签名完全匹配,避免手写失误。

















