我需要使用第一张图片中给出的名称和方法定义4个接口。
但是,我需要保持以下关系:
所以,我用继承修改了接口,如下所示:
但问题是,AnimalMutable得到了两个" GetLifeSpan()"方法(一个来自AnimalConst,另一个来自LivingBeingMutable)。谁能让我知道设计它的正确方法是什么?
答案 0 :(得分:2)
这是一个着名的多重继承问题,称为“钻石问题”#34;。
您需要诸如虚拟基类之类的概念 - "虚拟继承" (C ++)。
有关详细信息,请查看此处:
http://www.learncpp.com/cpp-tutorial/117-multiple-inheritance/
http://www.learncpp.com/cpp-tutorial/118-virtual-base-classes/
您可以尝试使用单继承,因为使用单继承也可以完成多重继承的概念,并且有许多广泛使用的OOP语言仅支持单继承。
其他语言不支持纯多重继承,但提供了替代机制来获得多重继承的一些好处,并避免出现此类问题。 Java中的接口就是这样一种机制,因为您只需定义签名方法,并且实现始终是实现它们的类的责任,尽管类可以实现许多接口。
答案 1 :(得分:0)
这可能是c ++中的钻石问题。
如果您正在使用Java / C#(从您提及的界面猜测),您应该没有任何问题。
发明界面是为了解决钻石问题。
代替方法原型,如果你有一个成员变量被继承,那么“它来自哪里”的问题就会有意义。
因为它只是方法的原型(无论如何都是一样的),如果从多个接口继承相同的方法并不重要。所以你可以安全地创建这些接口而没有任何问题。 / p>
希望这有帮助。