super是Java中访问父类构造器、字段和方法的关键字,用于解决遮蔽与重写歧义,必须在实例上下文中使用且不可用于static环境。

Java 中继承使用 super 关键字,核心是让子类能明确访问父类的构造器、字段和方法,尤其在存在同名遮蔽或方法重写时避免歧义。它不是对象引用,而是编译期确定的“父类部分访问通道”,必须依赖实例,不能在 static 环境中用。
调用父类构造器(必须首行)
子类构造器默认第一行隐含 super(),即自动调用父类无参构造器。如果父类没提供无参构造器,就必须显式写 super(参数),且只能放在第一行。
- 作用是初始化当前对象中从父类继承来的那部分字段(比如 name、id),不是创建新父类对象
- super() 和 this() 不能共存——两者都要求为首句,语法上互斥
- 若父类只有带参构造器,而子类构造器又没写 super(...),编译直接报错
访问父类同名字段(解决遮蔽)
当子类定义了和父类同名的 public 或 protected 字段(如 int id),直接写 id 会访问子类自己的;要读/写父类那份,必须用 super.id。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- private 字段无法通过 super 访问,这是封装限制,不是 super 的缺陷
- 常见于构造器或初始化块中设置父类字段默认值,例如 super.name = "Unknown"
- 字段遮蔽本身应尽量避免,但 super 是处理遗留代码或复杂继承链时的必要手段
调用被重写的父类方法(可在任意位置)
子类重写了父类方法(如 toString()、run()),仍可通过 super.methodName() 调用原始实现。
立即学习“Java免费学习笔记(深入)”;
- 典型用法:先执行父类逻辑(校验、日志、资源准备),再追加子类行为
- 不像构造器里的 super(),这里没有位置限制,可出现在方法体任意处
- 即使父类方法没被重写,super. 也能调用——它本质是显式指定调用来源,不依赖是否覆盖
使用限制与常见误区
super 不是万能钥匙,有明确边界:
- 不能在 static 方法、静态代码块或静态变量初始化中使用——它绑定实例,static 不属于任何实例
- 只能访问直接父类成员,不能跨级调祖父类(除非父类已把祖父类成员以非 private 方式暴露出来)
- 不能访问父类 private 成员,无论字段还是方法,这是 Java 封装机制决定的
- 不要把它理解成“父类对象”,当前内存中只有一个子类实例,super 只是访问其中父类结构的那一部分

















