我试图编写简单的游戏来测试Java中的一些新功能。我有Class Monsters并且有int hp:
public class Monsters {
int hp;
public Monsters() {
}
public Monsters(int hp) {
this.hp = hp;
}
}
然后我有两个子类 - 主要英雄HERO和他的对手Devil。他们也有int hp,因为他们的生活水平不同:
public class Devil extends Monsters {
int hp = 200;
}
和HERO:
public class HERO extends Monsters{
public HERO(int hp) {
this.hp = hp;
}
}
我试图写作斗争();方法:
public void fight(Monsters hero) {
int heroLife = hero.hp;
int opLife = hp;
System.out.println(opLife + " - Devil's life\n"
+ heroLife + " - Hero's life");
}
好的,现在在main()类Game中测试他们的hp:
public class Gra {
public static void main(String[] args) {
HERO hero = new HERO(5);
Devil devil = new Devil();
devil.fight(hero);
}
}
这是我的输出:
0 - Devil's life
5 - Hero's life
为什么是0,而不是200?
答案 0 :(得分:4)
hp
班级和Monsters
班级都有Devil
个变量。当您从hp
类(您的Monsters
方法)的方法访问filght
时,您将获得hp
的变量,默认为0。
您只应在基类中使用hp
,并使用Monster
的构造函数对其进行正确初始化:
例如:
public class Devil extends Monsters
{
public Devil ()
{
super(200);
}
}
答案 1 :(得分:3)
您正在创建新的hp
字段并隐藏继承的hp
。
替换
public class Devil extends Monsters {
int hp = 200;
}
与
public class Devil extends Monsters {
public Devil() {
this.hp = 200;
}
}
祝你好运。
答案 2 :(得分:0)
您没有在魔鬼类中定义默认构造函数。首先在默认构造函数中使用默认构造函数使用super关键字。
public class Devil extends Monsters
{
public Devil() {
super();
this.hp = 200;
}
}