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
不仅添加了新方法,而且实现了新方法。哦,好吧。。如果我这次读对了,我会使用策略模式@安卓彬