super用于访问父类构造函数或方法,本质是父类原型对象;子类构造器中必须先调用super()才能使用this;可调用父类实例方法、静态方法,但类型须匹配;super非对象,不可解构或赋值。

在 ES6 类中,super 关键字用于访问和调用父类的构造函数或方法,本质是引用父类的原型对象(即 Parent.prototype),不是指向父类实例。
在子类构造函数中必须用 super() 调用父类构造器
如果子类定义了 constructor,就必须在使用 this 之前调用 super(),否则会报错 ReferenceError: Must call super constructor in derived class before accessing 'this'。
- 不传参:直接写
super(),相当于调用父类无参构造函数 - 传参:把需要传给父类构造函数的参数写进去,如
super(name, age) - 不能只写
super不加括号,那会报语法错误
用 super.方法名() 调用父类普通方法
在子类的实例方法里,可以用 super.methodName() 显式调用父类同名方法,常用于方法重写后想复用父逻辑。
- 注意:这里
super后面跟的是点号 + 方法名,不是括号,比如super.sayHello() - 调用时的
this指向当前子类实例,不是父类实例 - 不能在静态方法里用
super.实例方法(),也不能在实例方法里用super.静态方法()—— 必须匹配类型
在静态方法中用 super 调用父类静态方法
子类的静态方法可通过 super.staticMethod() 调用父类静态方法,此时 super 指向父类本身(即构造函数)。
立即学习“Java免费学习笔记(深入)”;
- 例如:
class Child extends Parent { static init() { super.init(); } } - 静态方法中不能访问
this实例属性,但super可以访问父类静态成员 - 不能在静态方法里用
super访问实例方法,反之亦然
super 不是对象,不能解构或赋值
super 是一个特殊关键字,不是真正的对象引用,所以不能做以下操作:
- ❌
const parent = super;(语法错误) - ❌
const { sayHi } = super;(报错) - ✅ 正确写法只有
super.xxx()或super.xxx(访问父类原型上的属性)


















