在Java中,我有一个abstract class Player
和两个类Striker
和Defender
,它们都扩展了abstract class Player
。我有Interface IAttack
和Interface IDefend
。在这两个接口中,只有一种方法的原型 - 方法shoot
(用于接口IAttack
)和方法tackle
(用于接口IDefend
)。我在类shoot
(resp tackle
)中实现了方法Striker
(resp。Defender
)。通过此层次结构,我可以创建Strikes,将球射向给定距离。我可以创建防守者,他们只能以给定的强度来对付某人。
我想要的是能够创造能够完成不同任务(并且不仅射击到给定距离)的前锋(分别是防守者)。例如,我希望有一名能够投中点球的前锋,一名能够与其一起打球的前锋等。
我该怎么做?我是否需要为罢工者创造更多的课程(我的意思是针对罢工者进行惩罚的班级,以及为头部打球的前锋的班级)。是否有一种更优雅的方式让罢工者可以完成多项任务?
答案 0 :(得分:1)
实现它的几种方法。
1)让另一个Stricker
类实现两个IShootPenalty, and IAttack
行为。您可以创建单独的所需接口,并让每个播放器对象实现适当的接口。根据需要混合搭配。
(或)
2)为抽象类中的每个行为创建布尔标志,并根据所需行为设置适当的标志。
Stricker.setShootPenality(true);
Striker.setShooter(true);
答案 1 :(得分:0)
一个好方法是将所有属性放在不同的类中。
比如说一个名为StrikerProperties.java
的类。
您可以在此处设置不同的变量,并根据播放器的其他特征设置true
或false
。这样您就可以将它用于不同的对象,也可以用于不同的类,以防您想要组建团队以及之后的所有团队。