gpt4 book ai didi

javascript - 抽象类应该直接实现接口(interface)吗?有什么优点和缺点

转载 作者:行者123 更新时间:2023-12-01 02:14:25 25 4
gpt4 key购买 nike

我正在研究一些抽象概念,想知道抽象类是否应该直接实现接口(interface),或者您应该扩展该类并在子类型中实现接口(interface)。

因此在下面的示例中:

  • 不再冗长
  • 动物可以直接用作地球生物的类型
interface Being{
alive:boolean;
}

abstract class Animal implements Being{
alive:boolean;
}

class Dog extends Animal{
bark(){
console.log("Bark");
}
}

class Earth{
beings:Being[];
}

该示例可以重写如下:

  • 它更详细,您可以看到 Dog 实现了 Being 接口(interface)
interface Being{
alive:boolean;
}

abstract class Animal{
alive:boolean;
}

class Dog extends Animal implements Being{
bark(){
console.log("Bark");
}
}

class Earth{
beings:Being[];
}

我的问题是:

  1. 第二个示例更好吗?
  2. 我们需要更高版本的示例是什么?
  3. 高版本有什么优势?

最佳答案

嗯,我想你已经给了自己答案。这两个示例代表了不同的用例,因此我认为没有“更好的示例”。

让我们尝试将其分解为简单的单词。

第一个例子,你有一个存在,所有动物都明确具有“活着”的属性。这对于本例中的狗也很重要。

但是,在第二个示例中,您的 Animal 不需要具有“alive”属性。 (那么问题是,拥有它是否真的有意义)。然而,Dog 再次实现了该接口(interface)。

所以,如果你说有可能有一只狗,那是一只动物,但不应该有“活着”的属性(也许它是一只僵尸狗),你应该把它放在狗本身上。但是,如果您无论如何都要在 Animal 类中实现所有字段/函数/逻辑(并且您不关心 Zombie-Dogs),则应该将接口(interface)放在 Animal 类上。

所以这可能不是您正在寻找的“明确”答案。但这取决于具体情况。您应该始终在相应逻辑所在的位置实现接口(interface)。因此,如果您希望动物上有事件逻辑,请将其放在那里,如果可能存在没有事件属性的动物,请将其放在狗本身上。

关于javascript - 抽象类应该直接实现接口(interface)吗?有什么优点和缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49559077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com