我正在开发一款简单的游戏。我创建了一个名为Monster
的类,其中包含一个构造函数,可以作为所有怪物的基本模板。这是Monster
类:
public class Monster {
public int attackPower;
public String weaponName;
public int armorLevel;
public String armorName;
public int life;
public String monsterClass;
public String monsterName;
public int monsterNumber;
public Monster(int attackPower, String weaponName, int armorLevel, String armorName, int life, String monsterClass, String monsterName, int monsterNumber) {
this.attackPower = attackPower;
this.weaponName = weaponName;
this.armorLevel = armorLevel;
this.armorName = armorName;
this.life = life;
this.monsterClass = monsterClass;
this.monsterName = monsterName;
this.monsterNumber = monsterNumber;
}
}
这是我放在一起测试构造函数的类:
public class Area1Monsters extends Monster {
public static void main(String[] args) {
Monster rat1 = new Monster(1, "Claws", 3, "Fur", 9, "Fields", "Rat", 1);
System.out.println("Attack Power: " + rat1.attackPower);
System.out.println("Weaon Name: " + rat1.weaponName);
System.out.println("Armor Level: " + rat1.armorLevel);
System.out.println("Armor Name: " + rat1.armorName);
System.out.println("HP: " + rat1.life);
System.out.println("Starting Area: " + rat1.monsterClass);
System.out.println("Name: " + rat1.monsterName);
System.out.println("Monster Number: " + rat1.monsterNumber);
}
}
错误显示constuctor Monster in class Monster cannot be applied to given type;
required: int, java.lang.String, int, java.lang.String...
等。
我相信我已经正确匹配了构造函数中每个数据类型与rat1
对象创建的应用程序,但我显然遗漏了一些东西。我相信这是显而易见的。非常感谢任何帮助。
答案 0 :(得分:5)
您必须以这种方式更改Area1Monsters
声明:
public class Area1Monsters
没有extends
关键字。
答案 1 :(得分:4)
鉴于子类中缺少任何显式构造函数,编译器会生成一个默认构造函数,期望能够调用super()
,超类构造函数没有参数。要在没有无参数构造函数的情况下对类进行子类化,您需要提供一个显式构造函数来调用您拥有的超类构造函数。
或者,从Area1Monsters
删除“extends”子句。
答案 2 :(得分:0)
我相信这与继承有关。您的子类有一个隐式的空构造函数。
您需要在超类中定义一个空构造函数或在Area1Monsters中定义一个显式构造函数。显式构造函数必须调用超类构造函数(使用默认值或空值)