Ошибка: фактический и формальный списки аргументов различаются по длине при использовании метода super

    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 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";
    }
}

обязательно: int,String,String,String, найдена строка: int, String
причина: фактические и формальные списки аргументов отличаются по длине 1 ошибка

1 ответ

Решение

Вы передаете слишком мало вещей своему super конструктор. Конструктор для Pizza ожидает 5 вещей, а вы только 2.

Если вам не нужны лишние 3 аргумента, удалите их из родительского конструктора. Это одновременно упрощает вызов и гарантирует, что объект создается с тем, что ему нужно для существования, прежде чем вы измените любую другую информацию о состоянии на нем.

В качестве альтернативы, если эти аргументы необходимы для родительского класса, вы всегда можете создать другой конструктор, который принимает только эти значения:

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

... но в зависимости от того, как ваша программа предназначена для работы, это может привести к ложным NullPointerExceptions.

Другие вопросы по тегам