构造函数调用给出错误 - 继承

时间:2015-03-26 06:32:06

标签: java

在子类GreenSlime中,我给出了一个只有三个参数的构造函数(我不能添加任何其他实例变量)。但代码不断给出关于这一行的错误:super(loc,map,log);我明白构造函数应该具有相同数量的参数。但是我的规范说通过父构造函数设置所有字段。 fullcharge必须始终为4charge的起始值为0。我知道我只传递了3个参数而不是5个,但这是我项目的说明。我做错了什么,最好的方法/解决方案是什么?

import java.io.PrintStream;
public class GreenSlime extends Threat  {

    public GreenSlime(Coord loc, Map map, PrintStream log)
    {
        super(loc,map,log);
        super.fullCharge = 4;
        super.charge = 0;
    }

}
import java.io.PrintStream;



public abstract class Threat extends Thing {

    protected int charge;
    protected final int fullCharge;

    public Threat(Coord c, String repr, int fullCharge, Map map, PrintStream log)
    {
        super(c,repr,map,log);
        this.fullCharge = fullCharge;
        charge = 0;
    }

    public abstract void spawn(Coord c);

    @Override
    public void doAction()
    {

        while(charge != fullCharge)
        {
            System.out.println("\"+repr()"+"@"+"getLoc()\" speading");

            if(this.canPassThrough())
            {
                spawn(getPrevLoc().step(Direction.N));
                spawn(getPrevLoc().step(Direction.S));
                spawn(getPrevLoc().step(Direction.E));
                spawn(getPrevLoc().step(Direction.W));
            }
            charge++;
        }
    }

}

2 个答案:

答案 0 :(得分:1)

public GreenSlime(Coord loc, Map map, PrintStream log)
{
    super(loc,"",4,map,log);
}

我提供了一个空字符串""对于repr,但您可能需要null或其他值。

答案 1 :(得分:0)

在您的代码中,威胁构造函数有一个签名,可以接受5个参数,但是您在哪里尝试只传递3个参数。