super关键字核心作用是明确访问父类成员:①用super.x访问被遮蔽的非private父类变量;②用super.method()调用被重写的方法;③在子类构造器首行用super()调用父类构造器;super非对象引用,而是当前对象中父类部分的语法标识。

super关键字在Java中核心作用是明确访问父类的成员——包括变量、方法和构造器,尤其在子类与父类存在同名成员时,避免歧义并保障继承逻辑正确。
访问父类被隐藏的成员变量
当子类定义了与父类同名的实例变量时,该变量会“遮蔽”(shadow)父类变量。此时用this.x访问的是子类自己的变量,而super.x强制访问父类中定义的那个变量。
- 父类变量必须是非private的(否则不可见);
- 即使子类变量是private,super.x仍可读取父类public/protected/default权限的同名变量;
- 常见于模板类或配置类中,子类需保留父类原始参数值做对比或回退。
调用父类被重写的方法
子类重写(override)父类方法后,若仍需执行父类原始逻辑(比如初始化前校验、日志记录、资源预处理),可用super.methodName()显式调用。
- 可在方法体任意位置调用,不限首行;
- 常用于模板方法模式中,子类扩展行为但不绕过父类基础流程;
- 注意:不能调用父类private方法,也不能在static方法中使用super。
在子类构造器中调用父类构造器
每个子类对象创建时,必须先完成父类部分的初始化。super()或super(…)必须作为子类构造器的第一条语句出现。
立即学习“Java免费学习笔记(深入)”;
- 若未显式写出super(...),编译器自动插入super()(即调用父类无参构造器);
- 若父类没有无参构造器,子类必须显式调用super(参数),否则编译失败;
- super()和this()不能共存于同一构造器——二者都必须是首行,只能选其一。
super不是对象引用,而是类型上下文标识
super不是指向一个独立父类对象的引用,它代表“当前this对象中属于父类的那一部分内存结构”。整个对象仍是子类实例,只是通过super可定向操作其继承自父类的字段与行为。
- 不能将super赋值给变量(如Object obj = super;非法);
- 不能用于静态上下文(static方法、静态块、静态变量初始化);
- 可配合泛型或反射进一步限定访问范围,但本质仍是编译期绑定的语法糖。










