首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >接口继承-双继承问题

接口继承-双继承问题
EN

Stack Overflow用户
提问于 2014-04-04 23:10:50
回答 2查看 66关注 0票数 2

我需要定义4个接口的名称和方法,如第一张图片。

但是,我需要保持以下关系:

  • LivingBeingMutable“是”LivingBeingConst“
  • AnimalConst“是”LivingBeingConst“
  • AnimalMutable“是”LivingBeingConst“
  • AnimalMutable“是”LivingBeingMutable“
  • AnimalMutable“是”AnimalConst“

因此,我使用继承修改了接口,如下所示:

但问题是,AnimalMutable正在获得"GetLifeSpan()“方法的两个实例(一个来自AnimalConst,另一个来自LivingBeingMutable)。有人能告诉我设计它的正确方法是什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-04 23:16:49

这是一个著名的多重继承问题,称为“钻石问题”。

您需要一些概念,例如虚拟基类--“虚拟继承”(C++)。

有关更多信息,请在这里查看:

http://www.learncpp.com/cpp-tutorial/117-multiple-inheritance/

http://www.learncpp.com/cpp-tutorial/118-virtual-base-classes/

您可以尝试使用单一继承,因为使用多继承完成的概念也可以使用单一继承,而且有许多被广泛使用的OOP语言只支持单一继承。

其他语言不支持纯多重继承,而是提供替代机制,以获得多重继承的一些好处,从而避免此类问题。Java中的接口就是这样一种机制,因为您只需要定义签名方法,而实现总是由实现它们的类负责,尽管一个类可以实现许多接口。

票数 2
EN

Stack Overflow用户

发布于 2014-04-04 23:26:10

多继承在接口中是安全的。

这将是c++的钻石问题。

如果您使用的是Java / C# (根据您提到的接口猜测),您应该没有任何问题。

接口是用来解决钻石问题的。

如果您继承了一个成员变量,而不是方法原型,那么“它从哪里来”的问题将是有意义的。

因为它只是一个方法的原型(无论如何都是一样的),所以如果从多个接口继承相同的方法,那么并不重要。因此,您可以安全地创建这些接口,而不会有任何问题。

希望这能有所帮助。

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

https://stackoverflow.com/questions/22874505

复制
相关文章

相似问题

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