Inheritance A类:IA,其中IA继承IB与A类:IA,IB

Inheritance A类:IA,其中IA继承IB与A类:IA,IB,inheritance,interface,Inheritance,Interface,有什么区别 class A : IA (IA inherits IB) vs IA和IB是接口 我知道的一个区别是:您不需要知道第一个实现中是否存在IB。假设我们有一个接口 interface IEat { } interface Swim { } 当你创造一条鱼时,你会说 class Fish:IEat,ISwim { } 您可以创建另一个接口,而不是上述实现:- interface IAquatic:IEat,ISwim{} //在这里,您可以定义更多的行为,使其成为水上行为,稍后

有什么区别

class A : IA (IA inherits IB)
vs

IA和IB是接口


我知道的一个区别是:您不需要知道第一个实现中是否存在IB。

假设我们有一个接口

interface IEat
{
}
interface Swim
{
}
当你创造一条鱼时,你会说

class Fish:IEat,ISwim
{
}
您可以创建另一个接口,而不是上述实现:-

 interface IAquatic:IEat,ISwim{}
//在这里,您可以定义更多的行为,使其成为水上行为,稍后您的类可以使用这些行为

class Fish:IAquatic
{
}

class AnotherAquaticAnimal:IAquatic
{
}
IEat、ISwim都是与人类、水生生物或其他生物相关的一组不同的行为,如果有10种这样的行为来制造水生动物,那么在创造任何水生动物时,你必须记住并实施所有这些行为

相反,我们所做的是创建和接口IAquatic并将所有接口继承到此接口,现在您需要记住的是实现此IAquatic接口而不是这10个接口,这使您的生活变得轻松。

没有区别。请记住,您不必使用任何一个接口

这是一种设计选择。这取决于您如何构造接口

在您的示例中,您选择哪种方式可能并不重要。Fish:IAqautic、IEatAndSwim强制您为两个接口实现行为函数。在这里,至少在语义上,IAqautic、Ieata和Swim似乎是相似的。我们必须了解它们的相似性/不同性,才能判断不同设计选择的得失

假设IAqautic和IEatAndSwim在功能上不同,那么增益/损耗将出现在某个对象只需要其中一个的情况下。然后,您可以使用适用的函数,而不必使用第二个接口中的额外函数

假设IAqautic和IEatAndSwim在功能上相似,那么在您想要两者的情况下,收益/损失将是相同的。如果IEatAndSwim是IAqautic的一个特例,那么您可以让IEatAndSwim扩展IAqautic。您只需要使用一个界面,代码/意图就更清晰了


简而言之,这个问题实际上取决于接口之间的关系。您可以使用最有意义的选项。

为什么在这个问题中要标记C@如果你选择一个答案就好了。如果问题标记为已回答,则帮助所有人。你有两个不错的答案可供选择:Vinay,我不明白你的答案。再一次,我的问题是,不要做类鱼:IAquatic,做类鱼:IAqautic,Ieata和Swim会有什么收获/损失,我会改变IAquatic,这样它就不会延伸到Ieata和Swime,在你看来,这只是一种方便,而不是任何特殊目的所需要的。我没有实现10个接口,而是创建一个父接口并实现它。我还认为,这就是为什么我在问题中陈述了一个我知道的区别:您不需要知道IB是否存在于第一个实现中。谢谢Vinay:
class Fish:IAquatic
{
}

class AnotherAquaticAnimal:IAquatic
{
}