不同点
- 抽象类:
- 属性:可以定义抽象属性,即只声明属性类型,不进行初始化。
- 方法:可以包含抽象方法,抽象方法只有方法声明,没有方法体。抽象类不能被实例化,主要为子类提供一个通用的基类,子类必须实现抽象类中的抽象方法。
- 普通类:
- 属性:属性必须初始化或者在构造函数中初始化。
- 方法:所有方法都有具体的方法体,除非使用
abstract
关键字修饰(此时该类就变成抽象类了)。普通类可以直接实例化。
示例
- 抽象类示例:
// 定义一个抽象类
abstract class Animal {
// 抽象属性
abstract name: string;
// 抽象方法
abstract makeSound(): void;
// 普通方法
move(): void {
console.log('The animal is moving.');
}
}
// 定义一个子类继承抽象类
class Dog extends Animal {
name: string;
constructor(name: string) {
super();
this.name = name;
}
makeSound(): void {
console.log('Woof!');
}
}
// 不能直接实例化抽象类
// let animal = new Animal(); // 报错
let dog = new Dog('Buddy');
dog.makeSound();
dog.move();
- 普通类示例:
// 定义一个普通类
class Person {
// 普通属性,在构造函数中初始化
name: string;
constructor(name: string) {
this.name = name;
}
// 普通方法
greet(): void {
console.log(`Hello, my name is ${this.name}`);
}
}
let person = new Person('Alice');
person.greet();