@Override
是 Java 中非常常用的一个注解(Annotation),它的主要作用是标识子类方法覆盖(重写)了父类的方法 。虽然即使不加 @Override
,Java 依然允许你去覆盖父类的方法,但使用它有非常重要的好处:
1️⃣ 基本作用
- 当你在方法上加上
@Override
,编译器会强制检查你是否确实在重写父类或接口中的方法; - 如果方法签名不匹配(比如方法名拼错、参数不一致、返回类型不兼容),编译器会直接报错;
- 这可以有效避免因为拼写错误或方法签名不一致而导致程序潜在的 bug。
2️⃣ 使用场景
-
重写父类中的方法:
javaclass Animal { void makeSound() { System.out.println("Some sound"); } } class Dog extends Animal { @Override void makeSound() { System.out.println("Woof!"); } }
这里
Dog
的makeSound
方法用@Override
表示它覆盖了Animal
中的同名方法。 -
实现接口方法:
javainterface Runner { void run(); } class Person implements Runner { @Override public void run() { System.out.println("Person is running"); } }
3️⃣ 常见错误示例
-
方法签名和父类或接口中的方法不一致时会导致编译错误:
javaclass Animal { void makeSound() {} } class Dog extends Animal { @Override void makesound() { // 方法名大小写错误:makeSound → makesound System.out.println("Woof!"); } }
编译器会提示:
sqlError: method does not override or implement a method from a supertype
4️⃣ 为什么强烈推荐使用 @Override
✅ 避免拼写错误导致的方法没有真正重写;
✅ 让代码可读性更高,维护者一眼就能看出这是重写父类/接口的方法;
✅ 在重构代码或修改父类/接口方法名时能及时发现问题。
5️⃣ 适用范围
- 在 类继承 中,用于标识子类重写父类方法;
- 在 接口实现 中,用于标识类实现接口方法;
- 从 Java 6 开始,还可以用于重写接口的 默认方法(Java 8 引入 default 方法后)。
✅ 小总结
@Override
并不是必需的,但加上它是一种良好的编码习惯,能帮助你及早发现错误,并让代码更加规范和清晰。