子类重写父类方法后,直接调用方法名会执行子类版本;为复用父类逻辑(如前置/后置增强),必须用super.方法名()显式调用父类被重写的方法,且仅限非静态、可见的非private、非final方法。

在子类中调用被重写的父类方法,使用 super.方法名() 即可。
为什么需要 super 调用父类方法
子类重写父类方法后,直接调用该方法名会执行子类版本。若希望在子类逻辑中复用父类原有实现(比如扩展功能、前置/后置处理),就必须显式通过 super 关键字访问父类被覆盖的方法。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
基本语法和使用场景
格式统一为:super.方法名(参数),必须在子类重写方法内部调用,且不能在静态方法中使用(super 指向当前对象的父类实例,而静态上下文无 this/super)。
- 常用于构造器中调用父类构造器:super(...)(必须是第一行)
- 在重写的方法体中调用父类同名方法,实现“增强”逻辑
- 避免重复代码,复用父类已验证的逻辑
代码示例
假设父类有打印日志的方法,子类想先执行父类逻辑,再添加自己的处理:
class Animal {
void speak() {
System.out.println("Animal makes a sound");
}
}
class Dog extends Animal {
@Override
void speak() {
super.speak(); // 调用父类被重写的方法
System.out.println("Dog barks: Woof!");
}
}
// 调用 new Dog().speak() 输出:
// Animal makes a sound
// Dog barks: Woof!
注意事项
- super 不是对象引用,不能赋值给变量或做 null 判断
- 只能调用父类中 可见的非私有方法(private 方法不可被继承,自然无法 super 调用)
- 若父类方法被声明为 final,则不能重写,也无需 super 调用(编译报错)
- 接口默认方法也可被实现类重写,此时可用 super.方法名() 调用(Java 8+)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










