MST
星途 面试题库

面试题:TypeScript泛型约束下接口在类继承中的应用

定义一个泛型类,该类使用接口进行泛型约束,要求泛型类型必须实现特定接口。然后创建该泛型类的一个子类,并对其进行实例化,确保子类能正确遵循泛型约束。请写出完整代码。
48.8万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
// 定义特定接口
interface SpecificInterface {
    void specificMethod();
}

// 定义泛型类,使用接口进行泛型约束
class GenericClass<T extends SpecificInterface> {
    private T instance;

    public GenericClass(T instance) {
        this.instance = instance;
    }

    public void callSpecificMethod() {
        instance.specificMethod();
    }
}

// 创建泛型类的子类
class SubGenericClass extends GenericClass<SubClass> {
    public SubGenericClass(SubClass instance) {
        super(instance);
    }
}

// 实现特定接口的子类
class SubClass implements SpecificInterface {
    @Override
    public void specificMethod() {
        System.out.println("SubClass's specific method implementation");
    }
}

public class Main {
    public static void main(String[] args) {
        SubClass subClassInstance = new SubClass();
        SubGenericClass subGenericClassInstance = new SubGenericClass(subClassInstance);
        subGenericClassInstance.callSpecificMethod();
    }
}

以上代码在Java语言中实现了题目要求。定义了SpecificInterface接口,GenericClass泛型类通过接口约束泛型类型,SubGenericClass继承GenericClassSubClass实现SpecificInterface接口,并在main方法中进行了实例化与调用。如果是其他语言,实现思路类似但语法会有所不同。例如在C#中代码如下:

// 定义特定接口
interface ISpecificInterface {
    void SpecificMethod();
}

// 定义泛型类,使用接口进行泛型约束
class GenericClass<T> where T : ISpecificInterface {
    private T instance;

    public GenericClass(T instance) {
        this.instance = instance;
    }

    public void CallSpecificMethod() {
        instance.SpecificMethod();
    }
}

// 创建泛型类的子类
class SubGenericClass : GenericClass<SubClass> {
    public SubGenericClass(SubClass instance) : base(instance) { }
}

// 实现特定接口的子类
class SubClass : ISpecificInterface {
    public void SpecificMethod() {
        Console.WriteLine("SubClass's specific method implementation");
    }
}

class Program {
    static void Main() {
        SubClass subClassInstance = new SubClass();
        SubGenericClass subGenericClassInstance = new SubGenericClass(subClassInstance);
        subGenericClassInstance.CallSpecificMethod();
    }
}