@Override
本文最后更新于80 天前,其中的信息可能已经过时,如有错误请发送邮件到3082654005@qq.com

@Override 是 Java 中的一个注解(Annotation),主要用于标记某个方法是重写(覆盖)了父类的方法,或实现了接口中的抽象方法。它的核心作用是让编译器帮助我们检查 “重写” 是否正确,避免因手误等导致的逻辑错误。

主要功能:编译时校验

当一个方法被 @Override 标注时,编译器会自动检查以下规则:

  1. 该方法是否真的存在于父类(或实现的接口)中;
  2. 方法名、参数列表(类型、顺序、数量)是否与父类 / 接口中的方法完全一致;
  3. 返回值类型是否符合 “协变返回类型” 规则(即子类返回值可以是父类返回值的子类)。

如果不符合上述规则,编译器会直接报错,提前发现错误(而不是等到运行时才出问题)。

适用场景

  1. 重写父类的方法
    当子类需要修改父类中某个方法的实现时,用 @Override 标注,明确这是 “重写行为”。示例:java运行class Parent { public void sayHello() { System.out.println("Parent: Hello"); } } class Child extends Parent { // 标注@Override,表明这是重写父类的sayHello() @Override public void sayHello() { // 方法名、参数列表与父类完全一致 System.out.println("Child: Hello"); } }
  2. 实现接口的抽象方法
    在 Java 7 及之后,@Override 也可以用于标注接口实现类中对抽象方法的实现(Java 6 及之前仅支持标注父类方法的重写)。示例:java运行interface UserService { void saveUser(); } class UserServiceImpl implements UserService { // 标注@Override,表明这是实现接口的saveUser() @Override public void saveUser() { // 方法名、参数列表与接口完全一致 // 实现逻辑 } }

为什么要用 @Override

  1. 避免低级错误:比如不小心写错方法名(如把 sayHello() 写成 sayHi())、参数列表不匹配(如少写一个参数),编译器会直接报错提醒。反例(错误情况):java运行class Child extends Parent { // 错误:方法名拼写错误(应为sayHello),但未加@Override时编译器不会报错 // 实际会被当成子类新增的方法,而非重写父类方法 public void sayHelloOops() { System.out.println("Child: Hello"); } }
    若加上 @Override,编译器会立即提示 “方法未在父类中找到”,避免逻辑错误。
  2. 提高代码可读性:明确告诉其他开发者 “这个方法是重写的”,便于理解类之间的继承 / 实现关系。

注意点

  • @Override 仅用于方法,不能标注类、属性等;
  • 父类的 private 方法不能被重写(子类无法访问),若用 @Override 标注会报错;
  • 父类的 final 方法不能被重写(final 修饰的方法不可变),用 @Override 标注会报错。

总结:@Override 是一个 “辅助性注解”,本身不影响程序运行,但能通过编译器校验减少错误,同时增强代码的可读性和可维护性,建议重写方法时都加上

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇