将功能注入两个类而不使用通用超类

时间:2016-08-08 18:38:38

标签: java inheritance polymorphism code-duplication

我知道我想做的事听起来很愚蠢但是听着:

我有抽象类EntityPlayer(扩展Entity)和非抽象类TestPlayer(扩展Player)和TestMob (扩展Entity)。

现在我面临以下问题:

我想在Entity中实现一些具有相同功能的抽象方法TestPlayerTestMob。从理论上讲,我可以创建另一个类TestEntity(扩展Entity)并使TestPlayerTestMob继承。但是TestPlayer无法再继承Player

直接在Entity内部实现功能不是一种选择,因为并非所有子类都具有此功能。

除了重复代码之外,什么可以被视为可接受的解决方案?

2 个答案:

答案 0 :(得分:1)

不确定这是不是一种好的做法,但如果TestPlayerTestMob都持有对TestEntity的引用而不是继承它并且在每个相应的方法调用内部会怎么样? TestEntity内的相应方法。 #CompositionOverInheritance

答案 1 :(得分:1)

您也可以使用装饰器模式(https://en.wikipedia.org/wiki/Decorator_pattern)。您有一个接口Entity和两个实现它的类:ConcreteEntityDecorator,其中ConcreteEntity具有默认逻辑,Decorator具有对{{1}的引用并委托所有方法调用。然后你可以扩展Entity。您拥有Decorator

而不是new TestPlayer()