我正在尝试构建一个学习Java的应用,基本上这是在控制台上进行的足球比赛。
Class Player具有所有属性,例如姓名,号码,年龄。 还有其他一些从Player扩展的类,它们是Player Roles(前锋,后卫,中场,守门员)。 角色实现了一个接口,该接口具有获取每个属性的方法(如防御力和攻击力)。 因此,这里有一种方法就是“通用权力”,这个公式等于每个人,独立于玩家的角色。
如果在子类的类方法中设置通用权限,则必须在每个角色类中编写相同的代码几次(我几乎可以肯定这是错误的。代码重用)。
也许我必须在接口上实现该方法,但是我不知道如何进行。
我在GitHub上有一个链接-它在Develop分支上。
下面是一些代码,试图了解我要找出的内容。
public interface PlayerAttributes {
PlayerPosition getPlayerPosition(PlayerPosition position);
Double getAttackPower(Float value);
}
class Player {
String name;
Integer number;
PlayerPosition position; //Enum
}
public class Defender extends Player implements PlayerAttributes {
@Override
public PlayerPosition getPlayerPosition(PlayerPosition position) {
return PlayerPosition.DEFENDER;
}
@Override
public Double getAttackPower(Float value) {
return value * 1.2;
}
@Override
public Double getDefensePower(Float value) {
return value * 2.5;
}
}
答案 0 :(得分:1)
以下答案仅是一个建议,并不是迄今为止唯一的解决方案。它通过让Player
实现PlayerAttribute
接口来使用抽象类:
public interface PlayerAttributes {
PlayerPosition getPlayerPosition(PlayerPosition position);
Float getAttackPower(Float value);
Float getDefensePower(Float value);
}
abstract class Player implements PlayerAttributes {
String name;
Integer number;
@Override
public PlayerPosition getPlayerPosition(PlayerPosition position) {
return PlayerPosition.DEFENDER;
}
@Override
public Float getAttackPower(Float value) {
return value * attackPowerMultiplier();
}
public Float getDefensePower(Float value) {
return value * defensePowerMultiplier();
}
public abstract Float attackPowerMultiplier();
public abstract Float defensePowerMultiplier();
}
class Defender extends Player implements PlayerAttributes {
public static final Float ATTACK_POWER_MUTLIPLIER = 1.2f;
public static final Float DEFENSE_POWER_MUTLIPLIER = 2.5f;
@Override public Float attackPowerMultiplier() {
return ATTACK_POWER_MUTLIPLIER;
}
@Override public Float defensePowerMultiplier() {
return DEFENSE_POWER_MUTLIPLIER;
}
}
enum PlayerPosition {
DEFENDER
}
get<Type>PowerMultiplier()
方法仍然非常相似,但是这种方法试图使重复最小化。
您的代码有两句话:
float
,则它应返回一个float
(与double
相同),除非明确地表明有必要或有必要进行转换。