java - 方法不是抽象的,也不会覆盖方法

标签 java

<分区>

我刚刚发布了关于抽象方法的帖子,我认为这就是它无法编译的原因。

父类(super class)

public abstract class Monster extends GameCharacter {

   public abstract int getxP();      
   protected int monsterXP;

     public Monster(String name, int health, int attack, int xp) {
         super(name, health, attack);
         this.monsterXP = xp;
     } 

我的子类

public class Goblin extends Monster {

    public Goblin(String name, int health, int attack, int xp){
        super(name, health, attack, xp);
    }

    public Goblin(){
        this("Goblin", 70, 15, 2);
    }
} 

error:Goblin is not abstract and does not override abstract method getxP() in Monster

所以我不确定这里发生了什么,就构造函数而言,父类(super class) GameCharacter 的代码是相同的。我不明白为什么 xp 与名称、生命值和攻击不同。

为了清楚我是如何安排 super 类的

public abstract class GameCharacter {

    public abstract String getName();
    public abstract int getHealth();
    public abstract int getAttackPower();

    protected String gameCharacterName;
    protected int gameCharacterHealth;
    protected int gameCharacterAttack;

    public GameCharacter(String name, int health, int attack){
        this.gameCharacterName = name;
        this.gameCharacterHealth = health;
        this.gameCharacterAttack = attack;
    }
}

最佳答案

所以 GameCharacter 是一个抽象类 并且有抽象 方法。

Monster 是一个抽象类 并且有抽象 方法。

Goblin 是一个具体的,应该实现父类(super class)尚未实现的任何抽象 方法。我怀疑 getxP() 恰好是编译器遇到的第一个缺失并在此之后失败的。如果您实现了 getxP(),其他缺少的方法也应该会导致编译错误,假设它们没有在我们这里看不到的某些代码中实现。

要以代码形式回答,Goblin 需要如下所示:

public class Goblin extends Monster {

    public Goblin(String name, int health, int attack, int xp){
        super(name, health, attack, xp);
    }

    public Goblin(){
        this("Goblin", 70, 15, 2);
    }

    @Override
    public int getxP() {
        return monsterXP;
    }

    @Override
    public String getName() {
        return gameCharacterName;
    }

    @Override
    public int getHealth() {
        return gameCharacterHealth;
    }

    @Override
    public int getAttackPower() {
        return gameCharacterAttack;
    }
}

但是,正如@Dromlius 的回答所暗示的,您可能应该在各自的类中实现它们。

关于java - 方法不是抽象的,也不会覆盖方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34057893/

相关文章:

java - 什么时候为java中的静态变量分配内存?

java - 如何在基于 Spring 的 Web 服务上提供图像

java 字符串索引越界错误

Java:将UTC日期转换为本地时区

java - 如何防止Hashmap用不同的值覆盖相同的键

java - 将 matlab 输入 (stdin) 连接到 java

java - 我的 NetBeans 运行在什么 JVM 上

java - 创建递归迭代器

java - 计算 BigInteger 的位数和字数

java - 如何在Android中模糊背景图像