TypeScript:Abstract Class抽象类 作者:马育民 • 2025-10-09 10:27 • 阅读:10008 # 介绍 TypeScript 中支持抽象类(Abstract Class),它是一种不能直接实例化的类,主要用于定义其他类的共同接口和基础行为,同时强制子类实现特定方法。 ### 特点 1. 用 `abstract` 关键字声明 2. 可以包含抽象方法(无实现体)和具体方法(有实现) 3. 不能直接实例化,只能被继承 4. 子类必须实现抽象类中所有的抽象方法,否则子类也需声明为抽象类 ### 抽象类与接口的区别 - 抽象类可以包含具体方法实现,接口只能定义方法签名 - 类只能继承一个抽象类,但可以实现多个接口 - 抽象类更适合表示"是一个"的关系(继承),接口更适合表示"有能力"的关系(实现) # 用法 ### 基本用法 ```typescript // 定义抽象类 abstract class Animal { // 抽象方法(必须由子类实现) abstract makeSound(): void; // 具体方法(提供默认实现) move(): void { console.log("动物在移动"); } } // 继承抽象类并实现抽象方法 class Dog extends Animal { // 必须实现抽象方法 makeSound(): void { console.log("汪汪叫"); } // 可以重写父类的具体方法 move(): void { console.log("狗在跑"); } } // 实例化子类 const dog = new Dog(); dog.makeSound(); // 输出: "汪汪叫" dog.move(); // 输出: "狗在跑" // 错误:不能实例化抽象类 // const animal = new Animal(); // 编译错误 ``` ### 带属性的抽象类示例 ```typescript abstract class Vehicle { protected brand: string; constructor(brand: string) { this.brand = brand; } abstract start(): void; getBrand(): string { return this.brand; } } class Car extends Vehicle { start(): void { console.log(`${this.brand}汽车启动了`); } } const myCar = new Car("特斯拉"); myCar.start(); // 输出: "特斯拉汽车启动了" console.log(myCar.getBrand()); // 输出: "特斯拉" ``` 抽象类在 TypeScript 中常用于定义类层次结构的基础,提供代码复用的同时,确保子类遵循特定的接口规范。 原文出处:http://malaoshi.top/show_1GW20bARcPRy.html