推荐答案
在 TypeScript 中,类的继承是通过 extends 关键字来实现的。通过继承,子类可以继承父类的属性和方法,并且可以在子类中添加新的属性和方法,或者重写父类的方法。
// www.javascriptcn.com code example
class Animal {
name: string;
constructor(name: string) {
this.name = name;
}
move(distance: number = 0) {
console.log(`${this.name} moved ${distance}m.`);
}
}
class Dog extends Animal {
bark() {
console.log('Woof! Woof!');
}
}
const dog = new Dog('Buddy');
dog.move(10); // 输出: Buddy moved 10m.
dog.bark(); // 输出: Woof! Woof!在这个例子中,Dog 类继承了 Animal 类,因此 Dog 类的实例可以访问 Animal 类的 move 方法,同时也可以定义自己的 bark 方法。
本题详细解读
1. extends 关键字的作用
extends 关键字用于创建一个类作为另一个类的子类。子类继承了父类的所有属性和方法,并且可以在此基础上进行扩展或修改。
2. 继承的语法
class ChildClass extends ParentClass {
// 子类的属性和方法
}ChildClass是子类,ParentClass是父类。- 子类可以访问父类的所有非私有(
private)属性和方法。
3. 方法重写
子类可以重写父类的方法,即在子类中定义一个与父类同名的方法,这样子类的实例在调用该方法时会使用子类的实现。
class Cat extends Animal {
move(distance: number = 5) {
console.log(`${this.name} moved ${distance}m.`);
}
}
const cat = new Cat('Whiskers');
cat.move(); // 输出: Whiskers moved 5m.在这个例子中,Cat 类重写了 Animal 类的 move 方法,使得 Cat 类的实例在调用 move 方法时,默认移动距离为 5 米。
4. 调用父类的方法
在子类中,可以使用 super 关键字来调用父类的方法或构造函数。
// www.javascriptcn.com code example
class Bird extends Animal {
fly(distance: number) {
console.log(`${this.name} flew ${distance}m.`);
super.move(distance); // 调用父类的 move 方法
}
}
const bird = new Bird('Tweety');
bird.fly(20); // 输出: Tweety flew 20m. 和 Tweety moved 20m.在这个例子中,Bird 类的 fly 方法调用了父类 Animal 的 move 方法。
5. 继承的限制
- TypeScript 不支持多重继承,即一个类不能同时继承多个类。
- 如果父类有构造函数,子类必须在构造函数中调用
super(),否则会报错。
class Fish extends Animal {
constructor(name: string) {
super(name); // 必须调用父类的构造函数
}
}通过 extends 关键字,TypeScript 提供了强大的继承机制,使得代码可以更好地组织和复用。