super关键字是Java中用于访问父类成员的核心工具,代表当前子类实例中继承自父类的部分;可用于显式调用父类构造器(须首行)、访问父类同名字段(public/protected)及被重写的方法,但不可在static上下文中使用,也不能访问private成员或跨级调用祖父类。

super 关键字是 Java 继承机制中访问父类成员的核心工具,它不是指向一个独立对象,而是代表当前子类实例中“从父类继承来的那部分特征”。它的使用必须基于继承关系,且有明确的语法规则和限制。
调用父类构造方法
子类构造方法默认第一行隐含 super(),即自动调用父类无参构造器。若父类未定义无参构造器(只提供带参构造器),子类必须显式写出 super(参数),且必须放在构造方法的第一行。
- 不写 super() 时,编译器自动插入 super();但若父类没有无参构造器,编译直接失败
- 显式调用 super(参数) 是为了给继承来的字段正确初始化,比如姓名、年龄等共用属性
- super() 和 this() 不能共存于同一构造方法——两者都必须是首句,逻辑上互斥
访问父类同名成员变量
当子类声明了与父类同名的字段(如 int id),直接写 id 会访问子类自己的变量。要明确读取或修改父类的那份,必须用 super.id。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 仅适用于 public 或 protected 修饰的父类字段;private 字段无法通过 super 访问
- 常见于初始化阶段:比如 super.name = "Default" 设置父类部分的默认值
- 避免歧义:同名变量存在时,super 提供清晰的归属指向
调用被重写的父类方法
子类重写了父类方法(如 toString()、run()),仍可在子类方法体内通过 super.methodName() 调用原始父类实现。
立即学习“Java免费学习笔记(深入)”;
- 典型场景:在子类方法中先执行父类逻辑(如日志、校验、资源准备),再追加子类特有行为
- 不受位置限制——可在方法任意位置调用,不像构造器中的 super() 必须为首句
- 有助于复用和扩展,避免重复编写父类已有功能
使用限制与注意事项
super 不是万能引用,它受访问控制和上下文严格约束:
- 不能在 static 方法、静态代码块或静态变量初始化中使用——因为 super 依赖于具体实例
- 无法访问父类的 private 成员,无论字段还是方法
- 只能访问**直接父类**,不能跨级调用祖父类成员(除非祖父类成员被父类以非 private 方式暴露)
- 在构造器中调用 super(),本质不是创建父类对象,而是初始化当前对象中属于父类结构的那一部分

















