@Override注解用于标识子类重写父类方法,要求方法名、参数列表、返回类型(含协变)一致,访问权限不更严格,且父类方法不可为final、static或private;它仅在编译期校验重写合法性,提升可读性与错误发现效率。

使用@Override注解覆盖父类方法,核心是让子类提供与父类同名、同参数、同返回类型的方法实现,同时明确告诉编译器这是有意重写而非误写。它不改变重写规则本身,但能提前发现拼写错误、签名不匹配等问题。
必须满足的重写条件
Java中方法重写(override)不是加个注解就生效的,需同时满足:
- 方法名、参数列表(数量、类型、顺序)完全一致
- 返回类型相同,或是父类返回类型的子类型(协变返回类型)
- 访问权限不能比父类更严格(如父类是
protected,子类不能是private) - 不能重写被
final、static或private修饰的父类方法
@Override注解的实际作用
这个注解本身不参与运行逻辑,纯粹是编译期检查工具:
- 如果加了
@Override但找不到可重写的父类方法,编译直接报错(比如方法名写错、参数少写一个) - 如果父类方法被删除或改名,子类对应方法会立即暴露问题,避免“假覆盖”导致逻辑未生效
- 提升代码可读性,一眼看出哪些方法是重写而来
不加@Override也能重写成功,但失去上述保护和提示。
常见误用和排查建议
遇到“method does not override method from its superclass”这类错误,优先检查:
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
- 父类方法是否是
public/protected?private方法不可重写 - 子类方法参数类型是否完全匹配?例如
int和Integer不等价 - 是否误把重载(overload)当成重写?比如只改了参数个数或类型
- 父类是否在另一个模块或jar包里,且版本不一致导致方法实际不存在?
正确写法示例
假设父类有:
public class Animal {public void makeSound() {
System.out.println("Some sound");
}
}
子类应这样重写:
public class Dog extends Animal {@Override
public void makeSound() {
System.out.println("Woof!");
}
}
注意:@Override写在方法声明上方,不带括号,不加任何参数。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










