java - 构造函数不能应用于给定的类型

时间:2015-01-13 18:02:37

标签: java constructor

我正在开发一款简单的游戏。我创建了一个名为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对象创建的应用程序,但我显然遗漏了一些东西。我相信这是显而易见的。非常感谢任何帮助。

3 个答案:

答案 0 :(得分:5)

您必须以这种方式更改Area1Monsters声明:

public class Area1Monsters 

没有extends关键字。

答案 1 :(得分:4)

鉴于子类中缺少任何显式构造函数,编译器会生成一个默认构造函数,期望能够调用super(),超类构造函数没有参数。要在没有无参数构造函数的情况下对类进行子类化,您需要提供一个显式构造函数来调用您拥有的超类构造函数。

或者,从Area1Monsters删除“extends”子句。

答案 2 :(得分:0)

我相信这与继承有关。您的子类有一个隐式的空构造函数。

您需要在超类中定义一个空构造函数或在Area1Monsters中定义一个显式构造函数。显式构造函数必须调用超类构造函数(使用默认值或空值)