super 用于子类复用父类逻辑:构造器中必须首行显式调用 super(参数)(若父类无无参构造器),实例方法中用 super.method() 调用父类版本,仅限非静态、可见成员,支持前置或后置增强。

子类通过 super 调用父类构造器或方法,是在复用父类已有逻辑的基础上做增量修改,而不是重写或替代——这是实现“逻辑扩展”的核心机制。
在构造器中用 super() 委托父类初始化
子类构造器默认第一行会隐式调用 super()(无参),若父类没有无参构造器,就必须显式写出 super(...) 并传入对应参数。这确保父类的字段和初始化逻辑先于子类执行。
- 父类有带参构造器时,子类必须显式调用
super(参数),否则编译失败 - 不能在构造器其他位置(如条件分支内)调用
super(),它必须是第一条语句 - 如果父类构造器抛出异常,子类构造器也需声明相同异常或其父类
在实例方法中用 super.方法名() 复用父类行为
当子类重写了父类方法,又需要在新逻辑中保留父类原功能(比如日志、校验、资源准备等),就用 super.methodName() 显式调用。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 只能在非静态方法中使用,因为
super指向当前对象的父类视图 - 调用的是父类版本的方法,不受子类重写影响,可绕过动态绑定
- 适合“前置增强”(如 super.init() 放开头)或“后置增强”(如 super.close() 放结尾)场景
注意访问权限与继承可见性
super 只能访问父类中对子类可见的成员:即 public、protected,以及同包下的默认(package-private)成员。无法通过 super 访问父类的 private 方法或字段。
- 若父类方法是
private,子类中定义同名方法属于全新方法,不是重写,也无法用super调用 - 字段被子类同名字段遮蔽时,可用
super.field明确访问父类字段(但通常建议避免字段遮蔽) - 静态方法不属于对象,不能用
super调用——即使子类定义了同名静态方法,也只是隐藏(hiding),不是重写
典型扩展模式示例
比如父类定义通用保存逻辑,子类增加事务控制或审计日志:
class Repository {
void save(Object data) {
System.out.println("Writing to DB...");
}
}
class UserRepo extends Repository {
void save(User user) {
System.out.println("Before saving user: " + user.getName());
super.save(user); // 复用父类基础保存
System.out.println("After saving user");
}
}
这里 super.save(user) 就是关键扩展点:不重复写数据库写入逻辑,只专注新增职责。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










