super关键字用于子类中显式访问父类非private、非static的成员:首行调用父类构造器(无参默认/有参显式),重写方法中调用父类逻辑,同名字段时访问被隐藏的父类实例变量;不可在static上下文或访问private成员时使用。

super 关键字用于在子类中访问父类的成员(属性和方法),尤其在子类重写了父类方法或定义了同名字段时,避免歧义并显式调用父类版本。
调用父类的构造方法
子类构造器第一行默认调用 super()(无参父类构造器)。若父类没有无参构造器,必须显式用 super(...) 调用带参构造器,否则编译失败。
- 必须放在子类构造器的第一行
- 参数需与父类某个构造器签名匹配
- 不能与
this()同时出现(二者都必须在首行)
访问父类的实例方法
当子类重写了父类方法,仍想在子类方法中执行父类逻辑时,用 super.方法名() 显式调用。
- 适用于非
private、非static的实例方法 - 即使子类没重写,也可用
super.method()强制调用父类版本(但通常没必要) - 例如:
super.toString()在重写的toString()中复用父类格式
访问父类的实例属性
当子类定义了与父类同名的字段(字段隐藏,不是覆盖),可用 super.字段名 访问父类中被隐藏的字段。
- 仅适用于非
private的实例变量(private字段无法直接通过super访问) - 注意:静态字段也能用
super.静态字段,但不推荐——应直接用父类名.字段更清晰 - 例如:父类有
protected String name = "Parent";,子类也定义String name = "Child";,则super.name取到的是"Parent"
不能用 super 做什么
super 是个引用,不是对象,也不能脱离实例上下文使用。
- 不能在
static方法或static代码块中使用(没有隐式对象实例) - 不能访问父类的
private成员(封装限制,与super无关) - 不能单独写
super(不像this可作返回值),必须搭配.或()
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











