子类重写父类方法需用@override注解,保持方法名、参数列表一致,返回类型相同或为子类型,访问修饰符不能更严格,不可重写final、static或private方法;可通过super.调用父类逻辑再拓展。

子类重写父类方法时,用 @Override 注解标记方法,保持方法签名(名称、参数列表、返回类型)与父类一致;若需在原有逻辑基础上拓展,可借助 super.方法名() 调用父类实现,再添加新代码。
重写方法的基本要求
重写(Override)不是重载(Overload),必须满足:
- 方法名、参数列表(个数、类型、顺序)完全相同
- 返回类型相同,或是父类返回类型的子类型(协变返回)
- 访问修饰符不能比父类更严格(如父类是 protected,子类不能是 private)
- 不能重写被 final、static 或 private 修饰的父类方法
在重写中调用父类逻辑并拓展
常见场景是“先执行父类原有逻辑,再补充子类特有行为”。例如:
// 父类
class Animal {<br>
void makeSound() {<br>
System.out.println("Animal makes a sound");<br>
}<br>
}
// 子类
class Dog extends Animal {<br>
@Override<br>
void makeSound() {<br>
super.makeSound(); <font color="gray">// 复用父类行为</font><br>
System.out.println("Dog barks: Woof!"); <font color="gray">// 新增功能</font><br>
}<br>
}
注意访问权限与异常处理
重写方法时要留意两点细节:
- 如果父类方法声明了受检异常(checked exception),子类重写方法可以不抛出该异常,或抛出其子类,但不能抛出更宽泛的异常
- 父类方法若为 public,子类重写必须也是 public;若父类是 protected,子类可为 protected 或 public,不可降级为包私有或 private
避免常见错误
容易误判为重写的几种情况:
- 仅改变返回类型(非协变)→ 编译报错
- 参数名不同但参数类型相同 → 仍是重写(参数名不影响签名)
- 加了 static → 实际是隐藏(hiding),不是重写
- 忘记加 @Override 注解 → 无法在编译期发现签名错误,建议始终加上
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











