Java调用构造函数
我创建了一个测试项目,但遇到了一些我无法理解的问题 我想打电话给《战斗经理》中的怪物。我希望怪物的变量(Java调用构造函数,java,constructor,call,Java,Constructor,Call,我创建了一个测试项目,但遇到了一些我无法理解的问题 我想打电话给《战斗经理》中的怪物。我希望怪物的变量(名称,健康,伤害和防御)等于随机分配的任何怪物(狼怪或地精怪) 以前我只有一个怪物,我设法做到了,但是现在有两个怪物,如果选择了不同的怪物,我怎么能给变量传递不同的值呢 public class Units { int health; int damage; int defense; String name; public boolean isAliv
名称
,健康
,伤害
和防御
)等于随机分配的任何怪物(狼怪
或地精怪
)
以前我只有一个怪物,我设法做到了,但是现在有两个怪物,如果选择了不同的怪物,我怎么能给变量传递不同的值呢
public class Units {
int health;
int damage;
int defense;
String name;
public boolean isAlive(){
if(health >= 1){
return true;
}else{
return false;
}
}
}
public class Monster extends Units{
public Monster(String name,int health,int damage,int defense){
this.name = name;
this.health = health;
this.damage = damage;
this.defense = defense;
}
}
public class GoblinMonster extends Monster {
public GoblinMonster(String name, int health, int damage, int defense) {
super("Goblin",50,5,6);
this.name = name;
this.health = health;
this.damage = damage;
this.defense = defense;
}
}
public class WolfMonster extends Monster {
public WolfMonster(String name, int health, int damage, int defense) {
super("Wolf",50,5,6);
this.name = name;
this.health = health;
this.damage = damage;
this.defense = defense;
}
}
public class FightManager {
GameManager manage = new GameManager();
Player player = new Player("Player",100,10,5);
GoblinMonster gobli = new GoblinMonster("Goblin", 40, 7, 4);
WolfMonster wolf = new WolfMonster("Wolf",50,9,6);
boolean myTurn = true;
....
我想知道如何根据生成的怪物来分配monster的值。也许您想做的是在每个构造函数中将“name”设置为常量 例如,WolfMonster会是:
public class WolfMonster extends Monster {
public static String TYPE = "Wolf";
public WolfMonster(int health, int damage, int defense) {
super(WolfMonster.TYPE,health,damage,defense);
}
}
请注意,您不需要重新设计成员字段,因为在调用super()时将分配。我认为这里不需要多个子类和父单位类。您可以简单地创建不同的怪物对象,名称为WolfMonster、GoblinMonster
public class Monster {
int health;
int damage;
int defense;
String name;
Monster(String name, int health, int damage, int defense)
{
this.name = name;
this.health = health;
this.damage = damage;
this.defense = defense;
}
public boolean isAlive()
{
if(health >= 1){
return true;
}else{
return false;
}
}
}
public class FightManager {
GameManager manage = new GameManager();
Player player = new Player("Player",100,10,5);
//changes
Monster gobli = new Monster("Goblin", 40, 7, 4);
Monster wolf = new Monster("Wolf",50,9,6);
boolean myTurn = true;
// To-Do
}
为此,您必须使用多态性,将单元类声明为接口。方法isAlive()与属性一样抽象。另一方面,类Monster应该实现单元接口,其余Monster类将扩展类E Monster。最后,您将在每个子类上覆盖isAlive()方法,然后瞧 不清楚你想要什么。你能指定你所说的值是什么意思吗?我认为这里不需要两个子类。它们具有完全相同的字段和相同的行为(没有重写的方法)。而且,您的构造函数没有意义。每个字段初始化两次:一次在基构造函数中,一次在子类构造函数中。您从子类构造函数中传递了一个硬编码的名称,但随后立即用传递的名称覆盖它。不确定问题出在哪里。您似乎对此感到困惑。您当前的代码根本不需要继承。您所有的“特殊”单元仅在属性上有所不同。但是继承应该被用来提供不同的行为,这意味着:同名但内容不同的方法。是的,我想到了,但在未来我计划添加更多的怪物,我认为使用这种方法会有点过分,你可以通过调用新的怪物(“SomeName”,40,7,4)来使用更多的怪物;你救了我,兄弟!真的很感谢,这是我一直在寻找的答案