我知道我想做的事听起来很愚蠢但是听着:
我有抽象类Entity
和Player
(扩展Entity
)和非抽象类TestPlayer
(扩展Player
)和TestMob
(扩展Entity
)。
现在我面临以下问题:
我想在Entity
中实现一些具有相同功能的抽象方法TestPlayer
和TestMob
。从理论上讲,我可以创建另一个类TestEntity
(扩展Entity
)并使TestPlayer
和TestMob
继承。但是TestPlayer
无法再继承Player
。
直接在Entity
内部实现功能不是一种选择,因为并非所有子类都具有此功能。
除了重复代码之外,什么可以被视为可接受的解决方案?
答案 0 :(得分:1)
不确定这是不是一种好的做法,但如果TestPlayer
和TestMob
都持有对TestEntity
的引用而不是继承它并且在每个相应的方法调用内部会怎么样? TestEntity
内的相应方法。 #CompositionOverInheritance
答案 1 :(得分:1)
您也可以使用装饰器模式(https://en.wikipedia.org/wiki/Decorator_pattern)。您有一个接口Entity
和两个实现它的类:ConcreteEntity
和Decorator
,其中ConcreteEntity
具有默认逻辑,Decorator
具有对{{1}的引用并委托所有方法调用。然后你可以扩展Entity
。您拥有Decorator
new TestPlayer()