Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以将此方法放在父类中?_Java_Return_Arguments_Polymorphism_Parent Child - Fatal编程技术网

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

Java 是否可以将此方法放在父类中?,java,return,arguments,polymorphism,parent-child,Java,Return,Arguments,Polymorphism,Parent Child,我有一个方法sleep(),它将实例的int hp设置为final int MAX_hp。我把这个方法放在战士和法师类中,它们是角色的子类。这里的问题是,我在每个子类中分别定义MAX_HP,因为战士和法师的MAX_HP不同,所以我似乎还必须在每个类中声明sleep(),而不是在父类中仅声明一次-效率低下。有没有一种方法可以在父类中声明sleep方法并从子类中检索MAX_HP?还是有更好的方法 //Warrior Class public class Warrior extends Adventu

我有一个方法sleep(),它将实例的int hp设置为final int MAX_hp。我把这个方法放在战士和法师类中,它们是角色的子类。这里的问题是,我在每个子类中分别定义MAX_HP,因为战士和法师的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;
 }
是的,你可以

在抽象类中添加一个抽象方法:

public abstract int getChildHP();
并让
Warrior
Mage
执行它:

public int getChildHP() { return MAX_HP };
public void sleep() {
    setHp(getChildHP());
    System.out.println(getName() + "fully restored HP!");
}
MAX_HP
当然对每一个都是不同的)

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

public int getChildHP() { return MAX_HP };
public void sleep() {
    setHp(getChildHP());
    System.out.println(getName() + "fully restored HP!");
}
调用此方法时,将根据实例调用相关的getChildHP()。 现在
sleep()
在父类中只存在一次==>没有代码重复

希望能有帮助