我正在为一个小型纸牌游戏编写一段代码作为java中的辅助项目,并遇到了一个问题,我无法找到使用OOP的精确解决方案。
我有一个抽象类Card
,然后是两个具体的类Creature
和Machine
。我想要做的是拥有一张既是生物又是机器的卡片,但没有创建新的Machine_Creature
类,因为这意味着编写生物和机器已有的相同代码。
我正在寻找一种方法来创建这个Machine_Creature
类,使其能够获得Machine
和Creature
的功能,并阻止我复制和粘贴代码从一个地方到另一个地方只是为了启用功能
下面是我当前结构的一些示例代码
public abstract class Card {
//Card related methods and attributes
}
public class Machine extends Card {
//Machine related methods and attributes
}
public class Creature extends Card {
//Creature related methods and attributes
}
public class MachineCreature extends Card {
//MachineCreature related methods and attributes
//Problems arise here as we have to rewrite the code Creature and Machine
//already use
}
答案 0 :(得分:1)
Java不允许多重继承。解决问题的方法是使用合成。
Class MachineCreature {
Machine machine;
Creature creature;
...other sepecific methods and attributes
}
答案 1 :(得分:-1)
在层次结构中引入新级别可以解决问题,保持对象之间的“是一种”关系。我的意思是
class abstract Card{
//methods
}
class MachineCreature extends Card{
//methods in common beetween Machine and Creature implemented
}
class Machine extends MachineCreature{
//specific methods for Machine class
//optional overloading of parent class
}
class Creature extends MachineCreature{
//specific methods for Creature class
//optional overloading of parent class
}
否则,我不太喜欢这个解决方案 如果我是你,我会重新考虑帕特里夏给出的构成解决方案。