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

但是,我需要保持以下关系:
因此,我使用继承修改了接口,如下所示:

但问题是,AnimalMutable正在获得"GetLifeSpan()“方法的两个实例(一个来自AnimalConst,另一个来自LivingBeingMutable)。有人能告诉我设计它的正确方法是什么吗?
发布于 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中的接口就是这样一种机制,因为您只需要定义签名方法,而实现总是由实现它们的类负责,尽管一个类可以实现许多接口。
发布于 2014-04-04 23:26:10
多继承在接口中是安全的。
这将是c++的钻石问题。
如果您使用的是Java / C# (根据您提到的接口猜测),您应该没有任何问题。
接口是用来解决钻石问题的。。
如果您继承了一个成员变量,而不是方法原型,那么“它从哪里来”的问题将是有意义的。
因为它只是一个方法的原型(无论如何都是一样的),所以如果从多个接口继承相同的方法,那么并不重要。因此,您可以安全地创建这些接口,而不会有任何问题。
希望这能有所帮助。
https://stackoverflow.com/questions/22874505
复制相似问题