Error: Actual and formal argument lists differ in length when using super method

Error: Actual and formal argument lists differ in length when using super method

    public class Pizza
    {
        private int itemNum;
        private String size;
        private String base;
        private String extraCheese;
        private String extraGarlic;

        Pizza(int itemNum, String size, String base, String extraCheese, String extraGarlic)
        {
            this.itemNum = itemNum;
            this.size = size;
            this.base = base;
            this.extraCheese = extraCheese;
            this.extraGarlic = extraGarlic;
        }

        public String toString()
        {
            return "Pizza: " + itemNum + ", " + size + ", " + base + ", " + extraCheese + ", " + extraGarlic;
        }

}

这是父class,下面class是派生class。


class Curry extends Pizza
{
    String curryType;

    Curry(int itemNum, String size, String curryType)
    {
        // Error occurs here
        super(itemNum, size);
        this.curryType = curryType;
    }

    public String toString()
    {
        // return "Curry: " + itemNum + ", " + size + ", "  + curryType;
        return "Curry";
    }
}

required: int,String,String,String,String found: int,String
reason: actual and formal argument lists differ in length 1 error

您传递给 super 构造函数的东西太少了。 Pizza 的构造函数需要 5 个东西,而你只提供了 2 个。

如果您不需要额外的 3 个参数,请将它们从父构造函数中删除。这既简化了调用,又确保在您改变对象上的任何其他状态信息之前,只使用它需要存在的内容创建对象。

或者,如果父级 class 需要这些参数,您始终可以创建另一个仅接受这些值的构造函数:

public Pizza(int itemNum, String size) {
    this(itemNum, size, null, null, null);
}

...但是根据您的程序的预期工作方式,这可能会引入虚假的 NullPointerExceptions。