extends是实现类继承的核心关键字,子类通过它复用父类属性和方法,需用super()初始化父类,支持方法重写但不支持重载,常见错误包括未调用super()或在super前使用this。

在面向对象编程中,extends 是实现类之间继承关系的核心关键字。它让子类自动获得父类的属性和方法,避免重复编写相同逻辑,是代码复用最直接、最常用的方式。
继承的基本写法与规则
使用 extends 时,子类声明需明确指定父类名称,且一个类只能直接继承一个父类(单继承)。父类中的 public 和 protected 成员可被子类访问,private 成员不可见。
- 父类定义:用 class Parent { ... } 封装共用属性和方法
- 子类声明:用 class Child extends Parent { ... }
- 构造函数中若需初始化父类,必须显式调用 super(),且必须是第一行语句
属性复用的实际操作步骤
真正实现“属性复用”,关键不是简单地让子类能读到父类字段,而是让这些字段在子类实例中真实存在、可修改、可参与逻辑运算。
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
- 把通用属性(如 name、age、id)定义在父类构造函数中,并用 this 赋值
- 子类构造函数中先执行 super(name, age),把参数传给父类完成初始化
- 子类可在此基础上添加自己独有的属性,例如 department 或 level
- 实例化子类后,该实例同时拥有父类属性(如 obj.name)和子类属性(如 obj.department)
方法复用与重写(Override)的边界
父类方法默认被子类继承,可直接调用;但当子类需要不同行为时,可定义同名方法覆盖父类逻辑——这就是重写。注意区分“重写”和“重载”(JavaScript 不支持传统重载)。
- 重写时,建议在子类方法内通过 super.methodName() 调用父类原始实现,再补充或调整逻辑
- 避免在父类方法中直接访问子类特有属性,否则运行时会报 undefined
- 若父类方法标记为 final(某些语言支持),则不允许子类重写;JavaScript 中无此限制,靠约定或文档约束
常见误区与调试提示
初学者容易卡在几个典型问题上,多数与 super 调用时机、作用域或原型链理解偏差有关。
- 忘记写 super():子类构造函数中若不调用,会报错 “Must call super constructor”
- 在 super() 前使用 this:语法错误,ES6 明确禁止
- 误以为 extends null 或 extends undefined 可创建无原型对象:实际会报错,需用 Object.create(null)
- 检查继承是否生效:打印 instance.__proto__.__proto__ 或用 instance instanceof Parent 验证

















