我绘制了一个类图来说明我的问题:
它是带有一些抽象接口类的简单类层次结构。灰色类显示了一些我想用于测试的模型。像往常一样,模型是从接口类派生的。这对于“ MockAnimal”来说很好,但是在“ MockFish”和“ MockBird”中遇到了一些问题。
为了不复制代码并简化我的模型,在这些类(多重继承)中使用'MockAnimal'的模拟方法会很棒。然后,我只需要重写/模拟来自子接口(“ IFish”和“ IBird”)的方法。这行不通,因为我想我在这里面临某种钻石问题,因为'MockAnimal'的方法也在'ConcreteAnimal'中实现。因此,我的“ MockFish”和“ MockBird”将获得这两个实现,但是我只希望它们来自“ MockAnimal”。
作为一种解决方法,我更改了类层次结构,只是从接口“ IFish”和“ IBird”派生了“ MockFish”和“ MockBird”。但是我认为这不是一个好的解决方案,因为样机将使用'ConcreteAnimal'的全部实现。
我希望这是可以理解的。有什么好的解决方案可以实现我想要的吗?