super是java中用于子类访问父类成员的关键字:①构造器首行显式调用父类构造器;②访问被隐藏的父类字段;③调用被重写的父类实例方法;不可用于static上下文、private成员或多级父类调用。

super 是 Java 中用于在子类中访问父类成员的关键字,主要解决子类与父类同名成员(字段、方法、构造器)之间的访问冲突或显式调用需求。
调用父类构造器(必须是子类构造器的第一行)
子类构造器默认会隐式调用 super()(无参父类构造器)。若父类没有无参构造器,或你想调用特定父类构造器,则必须显式使用 super(...),且只能出现在子类构造器首行。
- 例如:
super("张三", 25);调用父类含两个参数的构造器 - 错误写法:在构造器中间或方法里写
super(...)—— 编译不通过 - 注意:
this(...)和super(...)不能共存于同一构造器中
访问被子类隐藏的父类字段
当子类定义了与父类同名的实例字段时,子类对象中实际存在两份字段(父类继承的一份 + 子类自己声明的一份)。用 super.字段名 可明确访问父类那份。
- 例如:父类有
protected String name = "Parent";,子类也有String name = "Child";,则super.name得到 "Parent" - 静态字段也可用
super.静态字段访问,但更推荐用父类名.静态字段,语义更清晰
调用被子类重写的父类实例方法
当子类重写了父类的实例方法,又需要在子类方法中执行父类原逻辑时,用 super.方法名(...) 显式调用。
- 常见于
toString()、equals()、hashCode()等重写场景 - 例如:
super.toString() + ", age=" + age; - 不能用
super调用static方法(虽然语法允许,但实际是通过类名调用,super在此处无意义)
不能做的事(常见误区)
super 不是对象引用,不能赋值给变量,也不能用它调用父类私有(private)成员——因为私有成员对子类不可见,编译直接报错。
-
super不能在static方法或static代码块中使用(没有隐式父类对象上下文) -
super.super.method()不合法——Java 不支持多级显式父类调用 - 不能用
super访问父类未被继承的成员(如父类private字段或方法)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











