我有一个方法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;
}
答案 0 :(得分:2)
是的,你可以。
在抽象类Adventurer
内添加一个抽象方法:
public abstract int getChildHP();
让Warrior
和Mage
实现它:
public int getChildHP() { return MAX_HP };
(当然MAX_HP
对于每一个都不同。)
将sleep()
方法(将其从子项中删除)移动到抽象类并实现它:
public void sleep() {
setHp(getChildHP());
System.out.println(getName() + "fully restored HP!");
}
调用此方法时,将根据实例调用相关的getChildHP()。
现在sleep()
在父类中只存在一次==>没有代码重复。
希望它有所帮助。