MST

星途 面试题库

面试题:TypeScript中抽象类与接口在实际项目中的应用差异

请举例说明在一个简单的项目场景(如开发一个游戏角色系统)中,何时使用抽象类,何时使用接口,阐述它们各自的特点以及应用场景的差异。
47.8万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

抽象类

  • 特点
    • 可以包含抽象方法和具体方法。抽象方法只有声明,没有实现;具体方法有完整的方法体。
    • 抽象类不能被实例化,只能被继承。
    • 一个类只能继承一个抽象类。
  • 在游戏角色系统中的应用场景及举例:当游戏中有多种不同类型的角色,但这些角色有一些共性的行为或属性时,可以使用抽象类。例如,创建一个AbstractCharacter抽象类,它包含一些所有角色都有的属性,如name(名字)、health(生命值),以及一些可能通用的具体方法,如displayInfo()用于显示角色基本信息。同时,可能还有抽象方法,如attack(),因为不同角色攻击方式不同。然后具体的角色类,如Warrior(战士)、Mage(法师)继承自AbstractCharacter,并实现attack()方法。

接口

  • 特点
    • 所有方法都是抽象的,没有具体实现。
    • 接口不能包含成员变量(除了public static final修饰的常量)。
    • 一个类可以实现多个接口。
  • 在游戏角色系统中的应用场景及举例:当游戏角色需要具备一些额外的功能,且这些功能并不适合用继承体系来表示时,可使用接口。比如,游戏中有部分角色具有飞行能力,创建一个Flyable接口,包含fly()抽象方法。Angel(天使)角色类除了继承某个基础角色抽象类外,还实现Flyable接口,从而具备飞行能力。这样就可以灵活地为不同类型的角色添加飞行功能,而不需要通过复杂的继承结构来实现。

应用场景差异总结

  • 抽象类:更侧重于定义一组具有共性的行为和属性,通过继承来实现代码复用,适合于存在明显继承关系,且有部分行为或属性可以通用的场景。
  • 接口:更强调行为的定义,用于实现类的多态性和功能的灵活添加,适合于为不同类添加一些不相关的功能,打破单继承的限制。