TypeScript抽象类

2023-05-22 10:12:11 浏览数 (1)

在 TypeScript 中,抽象类是一种特殊的类,它用于作为其他类的基类,但不能直接实例化。抽象类提供了一种定义通用属性和方法的方式,而具体的实现由其派生类完成。

定义抽象类

在 TypeScript 中,可以使用 abstract 关键字来定义抽象类。抽象类可以包含抽象方法和具体的方法实现。

代码语言:javascript复制
abstract class Animal {
  name: string;

  constructor(name: string) {
    this.name = name;
  }

  abstract makeSound(): void; // 抽象方法

  move(distance: number): void { // 具体的方法实现
    console.log(`${this.name} moved ${distance} meters.`);
  }
}

在上面的例子中,Animal 类是一个抽象类,它定义了一个 name 属性和一个抽象方法 makeSound(),以及一个具体的方法实现 move()

使用抽象类

抽象类不能直接实例化,只能被其派生类继承和实现。

代码语言:javascript复制
class Dog extends Animal {
  makeSound(): void {
    console.log("Woof! Woof!");
  }
}

const dog = new Dog("Buddy");
dog.makeSound(); // 输出: "Woof! Woof!"
dog.move(10);   // 输出: "Buddy moved 10 meters."

在上面的例子中,Dog 类继承了抽象类 Animal,并实现了抽象方法 makeSound()。通过创建 Dog 类的实例,我们可以调用抽象类中的具体方法 move(),以及实现的抽象方法 makeSound()

抽象属性

除了抽象方法,抽象类还可以包含抽象属性。抽象属性必须在派生类中实现。

代码语言:javascript复制
abstract class Shape {
  abstract area: number; // 抽象属性

  abstract calculateArea(): void; // 抽象方法
}

class Rectangle extends Shape {
  width: number;
  height: number;

  constructor(width: number, height: number) {
    super();
    this.width = width;
    this.height = height;
  }

  calculateArea(): void {
    this.area = this.width * this.height;
  }
}

const rectangle = new Rectangle(5, 3);
rectangle.calculateArea();
console.log(rectangle.area); // 输出: 15

在上面的例子中,Shape 类定义了一个抽象属性 area 和一个抽象方法 calculateArea()Rectangle 类继承了 Shape 类,并实现了抽象方法 calculateArea()。通过实例化 Rectangle 类并调用 calculateArea() 方法,我们可以计算矩形的面积并访问抽象属性 area

0 人点赞