MST

星途 面试题库

面试题:TypeScript泛型类多态性在复杂场景下的应用

有一个泛型类`DataProcessor<T>`,它有一个方法`process`用于处理类型为`T`的数据。现在有两个具体的数据类型`User`和`Product`,`User`包含`name`(string类型)和`age`(number类型)属性,`Product`包含`name`(string类型)和`price`(number类型)属性。要求创建两个继承自`DataProcessor`的子类`UserProcessor`和`ProductProcessor`,分别针对`User`和`Product`数据进行不同的处理逻辑(例如`UserProcessor`打印用户信息,`ProductProcessor`打印产品价格),请完整实现这个功能,并解释多态性是如何体现的。
48.6万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
class User {
    constructor(public name: string, public age: number) {}
}

class Product {
    constructor(public name: string, public price: number) {}
}

class DataProcessor<T> {
    process(data: T) {
        // 这是泛型类的通用方法,具体逻辑在子类中实现
    }
}

class UserProcessor extends DataProcessor<User> {
    process(user: User) {
        console.log(`User: name - ${user.name}, age - ${user.age}`);
    }
}

class ProductProcessor extends DataProcessor<Product> {
    process(product: Product) {
        console.log(`Product price: ${product.price}`);
    }
}

// 多态性的体现
// 1. 父类DataProcessor定义了一个通用的方法process,但是并没有具体实现。
// 2. 子类UserProcessor和ProductProcessor继承自DataProcessor,并根据自身处理的数据类型(User和Product)重写了process方法,实现了不同的处理逻辑。
// 3. 当使用父类类型的变量来引用不同子类的实例,并调用process方法时,会根据实际的对象类型(运行时类型)来调用相应子类的process方法。例如:
const userProcessor = new UserProcessor();
const productProcessor = new ProductProcessor();

const user = new User('John', 30);
const product = new Product('Book', 25);

const processors: DataProcessor<any>[] = [userProcessor, productProcessor];
const data: any[] = [user, product];

for (let i = 0; i < processors.length; i++) {
    processors[i].process(data[i]);
}

多态性体现在,虽然processors数组中存储的是DataProcessor类型的对象,但实际调用process方法时,会根据对象的实际类型(UserProcessorProductProcessor)来执行相应的逻辑,这就是多态性的体现,即同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。