推荐答案
在 TypeScript 中,super 关键字用于在子类中调用父类的构造函数或方法。它主要有以下两种用途:
调用父类的构造函数:在子类的构造函数中,必须首先调用
super(),以确保父类的构造函数被正确执行。这是 TypeScript 强制要求的,否则会抛出编译错误。调用父类的方法:在子类中,可以通过
super.methodName()的方式调用父类的方法,通常用于扩展或重写父类方法时保留父类的行为。
本题详细解读
1. 调用父类的构造函数
在 TypeScript 中,当一个类继承自另一个类时,子类的构造函数必须调用 super(),以初始化父类的成员。这是因为子类的实例化过程依赖于父类的初始化。
// www.javascriptcn.com code example
class Animal {
name: string;
constructor(name: string) {
this.name = name;
}
}
class Dog extends Animal {
breed: string;
constructor(name: string, breed: string) {
super(name); // 调用父类的构造函数
this.breed = breed;
}
}在上面的例子中,Dog 类继承自 Animal 类。在 Dog 的构造函数中,super(name) 调用了 Animal 的构造函数,确保了 name 属性被正确初始化。
2. 调用父类的方法
super 关键字还可以用于在子类中调用父类的方法。这在子类重写父类方法时非常有用,可以在子类方法中保留父类的行为,同时添加新的逻辑。
// www.javascriptcn.com code example
class Animal {
move(distance: number = 0) {
console.log(`Animal moved ${distance}m.`);
}
}
class Dog extends Animal {
move(distance: number = 5) {
super.move(distance); // 调用父类的 move 方法
console.log("Dog is running.");
}
}
const dog = new Dog();
dog.move(); // 输出: Animal moved 5m. Dog is running.在这个例子中,Dog 类重写了 Animal 类的 move 方法。通过 super.move(distance),Dog 类保留了 Animal 类的 move 方法的行为,并在此基础上添加了新的逻辑。
总结
super 关键字在 TypeScript 类继承中扮演着重要角色,它确保了父类的构造函数和方法能够被正确调用,从而实现了类的继承和多态性。