有什么关系呢?
class A : IA (IA inherits IB)vs
class A: IA, IB (IA and IB might have no relation)IA和IB是接口。
我知道的一个区别是:你不需要知道IB是否存在于第一个实现中。
发布于 2013-10-07 11:13:40
这是没有区别的。记住,您不必使用这两个接口中的任何一个。
这是一种设计选择。这取决于您如何构建接口。
在您的示例中,使用哪种方式可能并不重要。Fish:IAqautic, IEatAndSwim强制您实现这两个接口的行为(函数)。在这里,至少在语义上,IAqautic, IEatAndSwim看起来很相似。我们必须知道它们的相似/不同之处,才能判断不同设计选择的得失。
假设IAqautic和IEatAndSwim在功能上不同,那么在某些对象只想要这两者中的一个的情况下,将会产生增益/损失。然后,您可以使用适用的函数,而不必使用第二个接口中的额外函数。
假设IAqautic和IEatAndSwim是功能相似的,那么在您想要两者的情况下,收益/损失将是。如果IEatAndSwim是IAqautic的特例,那么您可以让IEatAndSwim扩展IAqautic。您只需要使用一个接口,并且您的代码/意图更加清晰。
简而言之,这个问题实际上取决于接口之间的关系。你会使用一个最有意义的。
发布于 2013-10-03 13:46:05
假设我们有一个接口
interface IEat
{
}
interface Swim
{
}在创建Fish时,您会说
class Fish:IEat,ISwim
{
}你可以创建另一个接口来代替上面的实现:
interface IAquatic:IEat,ISwim{}//您可以在此处定义更多行为,使其成为可供您的类稍后使用的水行为。
class Fish:IAquatic
{
}
class AnotherAquaticAnimal:IAquatic
{
}IEat,ISwim都是一组不同的行为,可以与人类,水生动物或其他生物联系在一起,如果有10种这样的行为来制造水生动物,你必须记住并实现所有这些行为,同时创造任何水生动物。
相反,我们所做的是创建和接口IAquatic,并继承此接口的所有接口,现在您所要记住的就是实现此IAquatic接口,而不是那10个接口,这将使您的工作变得轻松。
https://stackoverflow.com/questions/19151273
复制相似问题