super是Java中用于显式访问父类成员的关键字,可调用父类构造器、被重写的方法及被隐藏的字段,但不能访问private成员。

super 是 Java 中用于在子类中显式访问父类成员的关键字,主要解决子类与父类成员同名时的歧义问题,也能确保父类初始化逻辑被正确调用。
访问父类的构造方法
子类构造器第一行默认调用 super()(无参父类构造器)。若父类没有无参构造器,或你想调用特定父类构造器,则必须显式写 super(...),且只能出现在子类构造器首行。
- 不写
super()时,编译器自动插入无参super();如果父类没无参构造器,会编译失败 - 显式调用
super(10, "abc")可传参给父类有参构造器,完成父类字段初始化 - 不能同时出现
super(...)和this(...);二者只能选其一,且必须是构造器第一句
访问父类被重写的实例方法
当子类重写了父类方法,又需要在子类方法中调用父类原逻辑时,用 super.方法名()。
- 例如父类
Animal有makeSound(),子类Dog重写了它,但仍想复用父类打印日志的部分,可写super.makeSound() - 注意:
super调用的是编译时确定的父类版本,不是运行时动态绑定的子类版本(即不参与多态)
访问父类中被隐藏的字段
如果子类定义了和父类同名的实例字段(不推荐,但语法允许),子类中直接用变量名访问的是子类字段;要用 super.字段名 显式读取父类字段值。
立即学习“Java免费学习笔记(深入)”;
- 例如父类有
protected String name = "Parent";,子类也有String name = "Child";,那么this.name是 "Child",super.name是 "Parent" - 静态字段也可用
super.静态字段访问,但更推荐用类名访问(如Parent.CLASS_CONST),语义更清晰
不能访问父类私有成员
super 无法访问父类中 private 的字段或方法,因为 private 成员对子类不可见。若需访问,应将父类成员改为 protected 或提供 protected/public 的 getter 方法。
- 编译器会报错:"Cannot resolve symbol 'xxx'" 或 "xxx has private access in Parent"
- 这不是
super的限制,而是 Java 封装机制本身决定的


















