首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >A类: IA,其中IA继承IB,而A类: IA,IB

A类: IA,其中IA继承IB,而A类: IA,IB
EN

Stack Overflow用户
提问于 2013-10-03 13:15:18
回答 2查看 134关注 0票数 1

有什么关系呢?

代码语言:javascript
复制
class A : IA (IA inherits IB)

vs

代码语言:javascript
复制
class A: IA, IB (IA and IB might have no relation)

IA和IB是接口。

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

EN

回答 2

Stack Overflow用户

发布于 2013-10-07 11:13:40

这是没有区别的。记住,您不必使用这两个接口中的任何一个。

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

在您的示例中,使用哪种方式可能并不重要。Fish:IAqautic, IEatAndSwim强制您实现这两个接口的行为(函数)。在这里,至少在语义上,IAqautic, IEatAndSwim看起来很相似。我们必须知道它们的相似/不同之处,才能判断不同设计选择的得失。

假设IAqauticIEatAndSwim在功能上不同,那么在某些对象只想要这两者中的一个的情况下,将会产生增益/损失。然后,您可以使用适用的函数,而不必使用第二个接口中的额外函数。

假设IAqauticIEatAndSwim功能相似的,那么在您想要两者的情况下,收益/损失将是。如果IEatAndSwimIAqautic的特例,那么您可以让IEatAndSwim扩展IAqautic。您只需要使用一个接口,并且您的代码/意图更加清晰。

简而言之,这个问题实际上取决于接口之间的关系。你会使用一个最有意义的。

票数 2
EN

Stack Overflow用户

发布于 2013-10-03 13:46:05

假设我们有一个接口

代码语言:javascript
复制
interface IEat
{
}
interface Swim
{
}

在创建Fish时,您会说

代码语言:javascript
复制
class Fish:IEat,ISwim
{
}

你可以创建另一个接口来代替上面的实现:

代码语言:javascript
复制
 interface IAquatic:IEat,ISwim{}

//您可以在此处定义更多行为,使其成为可供您的类稍后使用的水行为。

代码语言:javascript
复制
class Fish:IAquatic
{
}

class AnotherAquaticAnimal:IAquatic
{
}

IEat,ISwim都是一组不同的行为,可以与人类,水生动物或其他生物联系在一起,如果有10种这样的行为来制造水生动物,你必须记住并实现所有这些行为,同时创造任何水生动物。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19151273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档