Ошибка: фактический и формальный списки аргументов различаются по длине при использовании метода 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);
}
... но в зависимости от того, как ваша программа предназначена для работы, это может привести к ложным NullPointerException
s.