有什么区别?
class A : IA (IA inherits IB)
VS
class A: IA, IB (IA and IB might have no relation)
IA和IB是接口。
我知道的一个区别:你不需要知道第一个实现中是否存在IB。
答案 0 :(得分:2)
没有差异。请记住,您 没有使用任何接口。
这是一个设计选择。这取决于您构建接口的方式。
在您的示例中,您执行的方式可能无关紧要。 Fish:IAqautic, IEatAndSwim
强制您为两个接口实现行为(函数)。在这里,语义至少,IAqautic, IEatAndSwim
似乎是相似的。我们必须知道它们是如何相似/不同来判断不同设计选择的收益/损失。
假设IAqautic
和IEatAndSwim
在功能上有所不同,那么在某些对象只想要其中一个的情况下,获得/损失就是这样。然后您可以使用适用的那个,而不必使用第二个接口中的额外函数。
假设IAqautic
和IEatAndSwim
功能相似,那么获胜/损失将在您想要两者的情况下。如果IEatAndSwim
是IAqautic
的特例,那么您可以IEatAndSwim
延长IAqautic
。您只需要使用一个接口,您的代码/意图就更清晰了。
简而言之,这个问题实际上取决于接口之间的关系。你会用他最有意义的。
答案 1 :(得分:1)
让我们说我们有一个界面
interface IEat
{
}
interface Swim
{
}
创建鱼时,你会说
class Fish:IEat,ISwim
{
}
您可以创建另一个界面,而不是上面的实现: -
interface IAquatic:IEat,ISwim{}
//在这里你可以定义更多的行为来使它成为水生的,以后可以被你的班级使用。
class Fish:IAquatic
{
}
class AnotherAquaticAnimal:IAquatic
{
}
IEat,ISwim是可以与人类,水生生物或其他生物相关联的所有不同行为,如果有10种这样的行为来制造水生动物你必须记住并在创造任何水生动物的同时实施所有这些行为
我们所做的就是创建和连接IAquatic并继承该接口的所有接口,现在你要记住的是实现这个IAquatic接口而不是那10个接口,这让你的生活变得轻松。