类 (Classes) 和接口 (Interfaces) 在 TypeScript 中的区别:
定义与用途
-
接口(Interfaces):
- 接口是 TypeScript 中用来定义一个对象的结构和类型的工具。它仅仅定义对象的类型,不进行实现。
- 它是一种严格的结构性合同,用于定义属性、方法的签名,但不包括方法的具体实现。
- 接口经常用于强制某个类或对象遵守特定的结构。
-
类(Classes):
- 类是对象的蓝图,它定义了对象的数据以及可以操作这些数据的方法。
- TypeScript 中的类不仅包含属性和方法的定义,还包括这些方法的具体实现。
- 类可以实例化,创建出具体的对象。
实现细节
-
接口:
- 接口是抽象的,不能包含任何具体的执行代码。
- 可以通过接口来定义一个类必须实现哪些方法和属性,但不关心这些方法的具体内容。
-
类:
- 类包含实际的代码,具体实现接口中声明的方法。
- 类可以实例化,即可以创建具体的对象,这些对象可以具有状态和行为。
继承和多态
-
接口:
- 支持多接口继承,一个类可以实现多个接口,从而组合多个接口的属性和方法。
- 接口之间也可以继承,使得接口可以复用其他接口的属性和方法。
-
类:
- 类支持单继承结构,即一个类只能继承自一个父类,但可以实现多个接口。
- 类可以通过继承另一个类来扩展功能,实现代码复用。
示例
-
接口的示例:
typescriptinterface IAnimal { name: string; makeSound(): void; } class Dog implements IAnimal { name: string; constructor(name: string) { this.name = name; } makeSound() { console.log("Woof! Woof!"); } }
在这个示例中,
IAnimal
接口定义了所有动物都应有的属性和方法,而Dog
类实现了这个接口,提供了具体的方法实现。 -
类的示例:
typescriptclass Animal { name: string; constructor(name: string) { this.name = name; } makeSound() { console.log("Some sound!"); } } class Cat extends Animal { constructor(name: string) { super(name); } makeSound() { console.log("Meow! Meow!"); } }
在这个示例中,
Animal
是一个基类,提供基本的构造函数和方法。Cat
类继承自Animal
类,并覆盖makeSound
方法以提供特定于猫的实现。
总结
接口提供了一种方式来确保某些类具有某些方法,但它们不关心方法的实现细节。而类是具体实现这些方法的结构。使用接口可以帮助我们在不同的类之间定义清晰的契约,而类则用于实现这些功能和行为。
2024年7月29日 13:24 回复