Java 将功能注入到两个类中,而不使用公共超类

Java 将功能注入到两个类中,而不使用公共超类,java,inheritance,polymorphism,code-duplication,Java,Inheritance,Polymorphism,Code Duplication,我知道我想做什么听起来很愚蠢但是听着: 我有抽象类Entity和Player(扩展Entity)和非抽象类TestPlayer(扩展Player)和TestMob(扩展Entity) 现在我面临以下问题: 我想在Entity中实现一些抽象方法,它们在TestPlayer和TestMob中具有相同的功能。理论上,我可以创建另一个类TestEntity(扩展Entity),并使TestPlayer和TestMob从中继承。但是,TestPlayer不能再从Player继承了 直接在实体内部实现功能不

我知道我想做什么听起来很愚蠢但是听着:

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

现在我面临以下问题:

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

直接在
实体
内部实现功能不是一个选项,因为并非所有子类都具有此功能


除了拥有重复的代码之外,还有什么可以被认为是可接受的解决方案呢?

不确定这是否是一个好的实践,但是如果
TestPlayer
TestMob
都持有对
TestEntity
的引用,而不是从中继承,那么在每个相应的方法内部调用相应的方法呢
TestEntity
#CompositionVerinHeritance

不确定这是否是一个好的实践,但是如果
TestPlayer
TestMob
都持有对
TestEntity
的引用,而不是从中继承,那么在每个相应的方法中调用
TestEntity
中相应的方法会怎么样呢#CompositionOverInheritance

您还可以使用Decorator模式()。您有一个接口
Entity
和两个实现它的类:
ConcreteEntity
Decorator
,其中
ConcreteEntity
具有默认逻辑,
Decorator
具有对
Entity
的引用,并委托所有方法调用。然后可以扩展
装饰器
。除了
newtestplayer()
,您有了
newplayer(newtestentity(newconcreteentity))

您还可以使用Decorator模式()。您有一个接口
Entity
和两个实现它的类:
ConcreteEntity
Decorator
,其中
ConcreteEntity
具有默认逻辑,
Decorator
具有对
Entity
的引用,并委托所有方法调用。然后可以扩展
装饰器
。您拥有的不是
newtestplayer()
,而是
newplayer(newtestentity(newconcreteentity))

您真正想要的是一个接口。。我当然想到了。这里的问题是,
Player
不仅添加了新方法,而且实现了新方法。哦,好吧。。如果我这次读对了,我会使用策略模式@Androbin您真正想要的是一个界面。。我当然想到了。这里的问题是,
Player
不仅添加了新方法,而且实现了新方法。哦,好吧。。如果我这次读对了,我会使用策略模式@安卓彬