typeScript中的extends关键字怎么使用
更新时间:2023-10-29
## extends关键字的基本使用
在TypeScript中使用`extends`关键字可以实现类的继承。通过继承,一个类可以获得另一个类的属性和行为,而无需重新编写这些代码。下面是一个简单的示例:
```typescript
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.bark(); // 输出 "Woof! Woof!"
dog.move(10); // 输出 "Buddy moved 10m."
```
在示例中,我们定义了一个`Animal`类和一个`Dog`类。`Dog`类继承了`Animal`类,并且定义了自己的行为`bark`。我们通过`new`关键字创建了一个`Dog`类的实例,调用`bark`和`move`方法。
## 子类构造函数
在子类中我们可以重写父类的构造函数,但是在重写的时候我们必须调用`super`方法,这个方法会调用父类的构造函数。下面是一个示例:
```typescript
class Animal {
name: string;
constructor(name: string) {
this.name = name;
}
move(distance: number = 0) {
console.log(`${this.name} moved ${distance}m.`);
}
}
class Snake extends Animal {
constructor(name: string) {
super(name);
}
move(distance: number = 5) {
console.log('Slithering...');
super.move(distance); // 调用父类的move方法
}
}
const sam = new Snake('Sammy');
sam.move(); // 输出 "Slithering... Sammy moved 5m."
```
在示例中,我们重写了`Animal`中的`move`方法,`Snake`的`move`方法会先输出`Slithering`,然后调用父类的`move`方法。
## 子类方法的重写
在子类中我们可以重写父类的方法,当调用这个方法时,会优先调用子类中的方法。下面是一个示例:
```typescript
class Animal {
name: string;
constructor(name: string) {
this.name = name;
}
move(distance: number = 0) {
console.log(`${this.name} moved ${distance}m.`);
}
}
class Horse extends Animal {
move(distance: number = 45) {
console.log('Galloping...');
super.move(distance);
}
}
const tom = new Horse('Tommy');
tom.move(); // 输出 "Galloping... Tommy moved 45m."
```
在示例中,我们重写了`move`方法,并在其中输出了`Galloping`。在调用`tom.move`时,输出了`Galloping`和`Tommy moved 45m.`。
## 关于使用extends关键字
使用`extends`关键字可以实现类的继承,这是面向对象编程中的一个关键特性。在继承中,子类可以获得父类的属性和行为,而无需重新编写这些代码。在TypeScript中,我们可以使用`extends`关键字来实现继承,并且可以通过重写方法和构造函数来添加和修改子类的行为。
在使用extends的时候,建议遵循下面的几点:
1. 子类必须调用父类的构造函数,否则会在实例化时出现错误。
2. 如果子类和父类具有相同的方法名,子类的方法会优先调用,可以在子类的方法中通过`super`关键字来调用父类的方法。
3. 注意继承链的深度,过多的继承会导致代码难以维护。
在实践中,extends关键字的使用可以有效地提高代码的可读性和重用性,建议在面向对象编程中广泛使用。