在子类构造函数中必须先调用super()初始化父类this,且仅能调用一次;需传入符合父类签名的参数;未定义constructor时会自动插入隐式super()。

在子类构造函数中调用 super(),是为了初始化父类的 this 对象,这是使用 class 语法时的强制要求。如果不调用或调用位置错误,会直接报错(如 ReferenceError: Must call super constructor before using 'this')。
必须在访问 this 前调用 super()
子类构造函数中,只要用了 this(包括读、写、传参、调用方法),就必须先调用 super()。JavaScript 引擎会在构造函数开头检查这一点。
- ✅ 正确:先
super(),再用this.name = name - ❌ 错误:先
this.name = name,再super()→ 报错 - ⚠️ 注意:
super()不仅是调用父类构造函数,它还负责创建并绑定子类实例的this,所以不可省略或延后
super() 必须传入符合父类构造函数签名的参数
父类构造函数需要什么参数,子类就必须通过 super(...) 传过去。否则可能导致父类属性未初始化或逻辑异常。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 如果父类是
constructor(name, age),子类就得写super(name, age) - 可以对参数做预处理,比如转换、默认值、校验,但最终要传给
super()的值需满足父类预期 - 示例:
super(name.trim(), Math.max(age, 0))是常见安全写法
super() 只能在子类构造函数中调用一次
重复调用 super() 会报错(TypeError: Constructors may only be invoked once)。即使写在条件分支里,也必须确保只执行一次。
- ❌ 错误:
if (...) super(a); else super(b); super(c);→ 最后一行非法 - ✅ 推荐:把参数计算好,统一调用一次
super(computedA, computedB) - ⚠️ 注意:箭头函数、普通函数内部不能调用
super(),仅限类的constructor顶层作用域
不定义 constructor 时,会自动插入隐式 super()
如果子类没写自己的 constructor,JS 会自动添加一个空构造函数,并在里面调用 super(...arguments),即原样转发所有参数给父类。
- 等价于:
constructor(...args) { super(...args); } - 此时你无需手动写
super,但一旦显式声明了constructor,就必须自己处理super调用 - 这个隐式行为只适用于无自定义构造函数的情况,不是“免调用”的捷径
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










