是否可以将此方法放在父类中?

时间:2018-02-24 03:08:26

标签: java return arguments polymorphism parent-child

我有一个方法sleep(),它将实例的int hp设置为final int MAX_HP。我已将此方法放在Warrior和Mage类中,它们是Character的子类。这里的问题是我在每个子类中单独定义MAX_HP,因为Warrior和Mage会有不同的Max_HP,所以看起来我必须在每个类中声明sleep()而不是在父类中只有一次 - 效率低下。有没有办法可以在父类中声明sleep方法,并以某种方式从子类中检索MAX_HP?或者有更好的方法吗?

//Warrior Class
public class Warrior extends Adventurer{
    private final int MAX_HP = 150;
    public void sleep(){
    setHp(MAX_HP);
    System.out.println(getName() + "fully restored HP!");
 }
}

//Mage Class
public class Mage extends Adventurer{
    private final int MAX_HP = 100;
    public void sleep(){
    setHp(MAX_HP);
    System.out.println(getName() + "fully restored HP!");
 }
}

//Adventurer Class
public abstract class Adventurer{
private int hp;
public Adventurer(int hp){
    this.hp = hp;
 }
public int getHp(){
    return this.hp;
 }
public void setHp(int hp){
    this.hp = hp;
 }

1 个答案:

答案 0 :(得分:2)

是的,你可以。

在抽象类Adventurer内添加一个抽象方法:

public abstract int getChildHP();

WarriorMage实现它:

public int getChildHP() { return MAX_HP };

(当然MAX_HP对于每一个都不同。)

sleep()方法(将其从子项中删除)移动到抽象类并实现它:

public void sleep() {
    setHp(getChildHP());
    System.out.println(getName() + "fully restored HP!");
}

调用此方法时,将根据实例调用相关的getChildHP()。 现在sleep()在父类中只存在一次==>没有代码重复。

希望它有所帮助。