在 TypeScript 中,抽象类是一种特殊的类,它用于作为其他类的基类,但不能直接实例化。抽象类提供了一种定义通用属性和方法的方式,而具体的实现由其派生类完成。
定义抽象类
在 TypeScript 中,可以使用 abstract
关键字来定义抽象类。抽象类可以包含抽象方法和具体的方法实现。
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
。