MST

星途 面试题库

面试题:TypeScript抽象类与接口在继承和实现上的复杂应用

假设有一个游戏开发场景,存在一个`Character`抽象类,具有`move`抽象方法。现在有`Warrior`和`Mage`两个类继承自`Character`。同时,有一个`MagicSkill`接口,包含`castSpell`方法。要求`Mage`类既继承`Character`抽象类又实现`MagicSkill`接口,并在实现过程中处理可能出现的方法签名冲突,描述实现思路并给出示例代码。
36.2万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 首先定义Character抽象类,包含move抽象方法。
  2. 定义MagicSkill接口,包含castSpell方法。
  3. Mage类继承Character抽象类并实现MagicSkill接口。
  4. 由于Character抽象类和MagicSkill接口不会出现方法签名冲突(题目中未提及相同签名方法),所以直接分别实现move方法和castSpell方法即可。

示例代码(以Java为例)

// Character抽象类
abstract class Character {
    // move抽象方法
    public abstract void move();
}

// MagicSkill接口
interface MagicSkill {
    void castSpell();
}

// Mage类,继承Character并实现MagicSkill
class Mage extends Character implements MagicSkill {
    @Override
    public void move() {
        System.out.println("Mage is moving.");
    }

    @Override
    public void castSpell() {
        System.out.println("Mage is casting a spell.");
    }
}

测试代码

public class Main {
    public static void main(String[] args) {
        Mage mage = new Mage();
        mage.move();
        mage.castSpell();
    }
}

在上述代码中,Mage类继承自Character抽象类并实现了MagicSkill接口,分别实现了两个接口/抽象类中定义的方法。如果在实际场景中有方法签名冲突(比如两个地方定义了同名同参数方法但返回值不同,Java中不会出现这种情况,在C++多重继承等场景可能出现),通常可以通过明确限定调用的是哪个接口/父类的方法,或通过中间类等方式来解决。但在本题给定条件下,按照上述直接实现的方式即可。