子类调用被重写的父类方法必须用super.方法名(),因为直接调用会触发动态绑定执行子类自身版本;super用于显式指定父类实现,适用于需复用父类逻辑、扩展功能或满足规范的场景。

子类调用被重写的父类方法,要用 super.方法名() 显式调用。
为什么不能直接用方法名?
当子类重写了父类的方法,直接写方法名会调用子类自己的版本(即重写后的方法),而不是父类的原始实现。JVM 默认走动态绑定,优先找当前对象实际类型的对应方法。想绕过这个机制、明确执行父类逻辑,就必须用 super 关键字。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
基本语法和使用场景
在子类方法内部,通过 super.方法名(参数) 调用父类被重写的方法。常见于以下情况:
- 子类在重写方法时,想先执行父类原有逻辑,再追加自己的处理(比如构造器初始化、日志记录、权限检查)
- 避免重复代码,复用父类已验证过的基础逻辑
- 满足某些框架或接口规范(如
toString()、equals()的正确重写)
一个简单例子
父类:class Animal {
void speak() {
System.out.println("Animal makes a sound");
}
}
子类:
class Dog extends Animal {
@Override
void speak() {
super.speak(); // ← 关键:调用父类被重写的 speak()
System.out.println("Dog barks: Woof!");
}
}
运行结果:
Animal makes a sound Dog barks: Woof!
注意事项
- super 只能在子类的非静态方法或构造器中使用,不能在 static 方法里调用(因为 super 指向父类实例,而 static 不依赖实例)
- 如果父类方法是 private 或被子类重载(overload)而非重写(override),super.方法名() 会编译报错
- 构造器中调用父类构造器必须用 super(...),且必须是第一行语句
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










