简述如何在TypeScript中实现继承?

在TypeScript中,继承是一种允许新创建的类(称为子类)从现有类(称为父类)继承属性和方法的机制。这是面向对象编程(OOP)的一个核心概念,旨在促进代码的重用。TypeScript实现继承的方式与ES6非常相似,使用extends关键字。

基本 继承

假设我们有一个父类Animal,我们想创建一个子类Dog继承Animal类的特性:

class Animal {
    name: string;
    constructor(theName: string) { this.name = theName; }
    move(distanceInMeters: number = 0) {
        console.log(`{this.name} moved{distanceInMeters}m.`);
    }
}

class Dog extends Animal {
    constructor(name: string) {
        super(name); // 调用父类的constructor
    }
    bark() {
        console.log('Woof! Woof!');
    }
}

在这个例子中,Dog类通过extends关键字继承了Animal类。Dog的构造函数中调用了super(name),这是必须的调用,因为我们需要通过父类的构造函数初始化name属性。之后,Dog类可以添加自己的方法,如bark

方法覆盖

子类可以覆盖从父类继承的方法,以提供特定于子类的行为:

class Snake extends Animal {
    constructor(name: string) { super(name); }
    move(distanceInMeters = 5) {
        console.log("Slithering...");
        super.move(distanceInMeters);
    }
}

在这个例子中,Snake类覆盖了Animal类的move方法,以提供对move行为的特殊实现。通过super.move(distanceInMeters)调用,Snake类还可以使用父类的move方法。

继承的规则和限制

  • 子类的构造函数必须调用super(),这会执行父类的构造函数。并且,在子类构造函数中访问this之前,必须先调用super()
  • 子类可以添加自己的属性、方法,也可以覆盖继承自父类的方法。
  • TypeScript支持单继承,意味着一个类只能继承自另一个类,但可以通过接口实现多重继承的效果。

通过使用继承,TypeScript允许开发者构建一个层次化的类结构,促进代码的重用和扩展性。继承是实现多态和代码组织的关键OOP特性之一。

发表评论

后才能评论