子类重写父类方法是通过同名方法覆盖父类原型上的方法,可使用super调用父类逻辑;class语法推荐在子类中定义同名方法,需先调用super()才能访问this;静态方法和getter/setter同样支持重写。

子类重写父类方法,核心是用 同名方法覆盖父类原型上的方法,同时可通过 super 调用被覆盖的父类逻辑。
使用 class 语法重写(推荐)
在 class 中定义与父类同名的方法即可完成重写。若需复用父类部分逻辑,用 super.方法名() 显式调用。
- 子类方法名与父类完全一致(包括大小写和参数名),JavaScript 自动覆盖
-
super只能在子类的构造函数或方法中使用,且必须先调用super()才能访问this - 重写后,实例调用该方法时执行的是子类版本,不是父类版本
class Animal {
speak() {
return "Animal makes a sound";
}
}
class Dog extends Animal {
speak() { // ✅ 重写父类 speak 方法
return super.speak() + " —— Woof!"; // ✅ 调用父类逻辑并扩展
}
}
new Dog().speak(); // "Animal makes a sound —— Woof!"
基于原型链的手动重写(ES5 风格)
通过修改子类原型对象上对应方法的引用,实现对父类原型方法的覆盖。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 确保子类原型正确继承自父类原型(常用
Object.setPrototypeOf(Child.prototype, Parent.prototype)) - 直接给
Child.prototype.methodName赋新函数 - 如需调用父类原方法,可缓存引用,例如
const parentSpeak = Parent.prototype.speak;
function Animal() {}
Animal.prototype.speak = function() {
return "Animal makes a sound";
};
function Dog() {}
Object.setPrototypeOf(Dog.prototype, Animal.prototype);
Dog.prototype.speak = function() { // ✅ 手动覆盖
return Animal.prototype.speak.call(this) + " —— Woof!";
};
注意 this 指向与调用时机
重写后方法内的 this 始终指向当前实例,但若错误地将重写方法作为普通函数调用(未绑定实例),this 会丢失。
- 避免直接提取方法后调用:
const fn = dog.speak; fn();→ 此时this为undefined(严格模式) - 稳妥做法:使用箭头函数绑定、
.bind(dog)、或调用时用dog.speak() - 构造函数中不要在父类方法尚未定义时就尝试重写(顺序很重要)
重写静态方法与 getter/setter
静态方法和访问器属性同样支持重写,规则一致:同名即覆盖,super 仍可用。
- 静态方法重写:在子类
class内用static methodName() { ... } - getter/setter 重写:用
get prop() { ... }或set prop(value) { ... } - 重写 getter 时,若需读取父类 getter,可用
super.prop(前提是父类定义了该 getter)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










