我刚刚发布了关于抽象方法的内容,我认为这就是它无法编译的原因。
超级
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);
}
}
错误:Goblin不是抽象的,不会覆盖抽象方法 getterP中的getxP()
所以我不确定这里发生了什么,超类GameCharacter的代码与构造函数相同。我不明白为什么xp与名称,健康和攻击不同。
为了清楚我如何安排我的超级课程
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;
}
}
答案 0 :(得分:2)
所以GameCharacter
是abstract class
并且有abstract
种方法。
Monster
是abstract class
并且有abstract
种方法。
Goblin是一个具体的class
,应该实现任何尚未由超类实现的abstract
方法。我怀疑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的回答所暗示的那样,你应该在他们各自的课程中实现这些。
答案 1 :(得分:1)
使方法抽象意味着您将在子类中实现它。在您的情况下,您将get-methods声明为abstract,这在您的场景中没有多大意义。
而不是写作:
public int getXX() {
return XX;
}
写:
Shay, Linn. 2015 .....
它不会抱怨你的Monster级别中的攻击,健康等,因为你也宣布了怪物级抽象,基本上说:“我知道这个类中有抽象方法(部分继承自GameCharacter),但是我将在下一个非抽象子类中实现它们(在你的情况下是Goblin)。
如果你想保持你的方法抽象,你必须在你的非抽象子类(Goblin)中实现所有抽象超类(GameChar& Monster)的所有抽象方法