MST

星途 面试题库

面试题:TypeScript中抽象类与普通类在成员定义上的区别

请详细阐述TypeScript里抽象类和普通类在成员(属性、方法)定义方面有哪些不同点,并各举一个简单示例说明。
10.7万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

不同点

  1. 抽象类
    • 属性:可以定义抽象属性,即只声明属性类型,不进行初始化。
    • 方法:可以包含抽象方法,抽象方法只有方法声明,没有方法体。抽象类不能被实例化,主要为子类提供一个通用的基类,子类必须实现抽象类中的抽象方法。
  2. 普通类
    • 属性:属性必须初始化或者在构造函数中初始化。
    • 方法:所有方法都有具体的方法体,除非使用 abstract 关键字修饰(此时该类就变成抽象类了)。普通类可以直接实例化。

示例

  1. 抽象类示例
// 定义一个抽象类
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();
  1. 普通类示例
// 定义一个普通类
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();