当前位置: 首页 > 知识库问答 >
问题:

Typescript抽象方法重载

毛博
2023-03-14
abstract class Animal {

    public abstract communicate(sentence: string): void;
    public abstract communicate(notes: string[]): void;

}

class Human extends Animal {

    public communicate(sentence: string): void {
        // Do stuff
    }

}

class Bird extends Animal {

    public communicate(notes: string[]): void {
        // Do stuff
    }

}

注意:参数的类型可以是完全不同的类型,与本例不同。

共有1个答案

慕容文昌
2023-03-14

正如@DavidSherret所说,子类必须实现所有抽象类重载,而不仅仅是其中一个。因此,您将无法使用抽象类重载来完成您想要的任务。

由于您希望使birdhuman具有不同的Communication()参数类型(由编译器强制执行),所以我将使用带有type constraint的泛型类型参数:

abstract class Animal<C extends string | string[]> {
    public abstract communicate(communication: C): void;
}

class Human extends Animal<string> {
    public communicate(sentence: string): void { }
}

class Bird extends Animal<string[]> {
    public communicate(notes: string[]): void { }
}

class Bynar extends Animal<boolean> { // Error: 'boolean' does not satisfy the constraint 'string | string[]'.
    public communicate(bit: boolean): void { }
}

const human = new Human();
human.communicate("hello"); // OK
human.communicate(["hello"]); // Error

const bird = new Bird();
bird.communicate("hello"); // Error
bird.communicate(["hello"]); // OK

提示:这里也可以使用TS2.3默认类型参数。

 类似资料:
  • 大家好,我有这个主课堂 错误:(42,8)错误:Home不是抽象的,并且不会覆盖OnFragmentInteractionListener中的onFragmentInteract(String)抽象方法 我创建了一个导航抽屉,并希望有一个新的片段来显示另一个家庭活动的内容。 Android Studio告诉我做个家。类抽象或实现抽象方法。 里面: 我那样做了,但是什么也没有改变。我不能让home类

  • 为什么我从下面的代码中得到这个编译错误消息? (程序根据键盘上按下的箭头键,在4个方向上移动箭头:d) Direction.java:41:错误:DirectionBoard。DirectionListener不是抽象的,并且不会覆盖KeyListener中的抽象方法keyReleated(KeyEvent)

  • 这似乎是一个基本问题。但在采访前需要澄清。 我在抽象类中有一个非抽象方法。它的具体类重写了该方法。但我想调用父类的原始方法来调用,而不是重写方法。有什么办法吗? 据我所知,没有办法调用原始方法?

  • 有人可以向我解释为什么它总是给我这个错误 错误:MyPanel不是抽象的,并且不重写ActionListener公共类MyPanel extends JPanel实现ActionListener中的抽象方法actionPerformed(ActionEvent){ 我想我做的一切都是对的,我不知道我做错了什么,这段代码用于测试使图像水平移动 这是我的密码 Main.java 我的框架。Java语言

  • 我的类KTree正在扩展抽象类GraphClass,但无法重写GraphClass中定义的一个方法。 原始方法添加(E E,V V,V v1)在界面无向图中定义 在类中,addEdge(E E,V V,V v1)抛出错误 “KTree”中的“addEdge(E,V,V)”与“GraphClass”中的“addEdge(E,V,V)”冲突;两种方法具有相同的擦除,但都不重写另一种方法 KTree中的

  • 不能定义 抽象类也不行 有什么其他的方法用来定义静态成员方法