层次结构中未定义的构造函数

Undefined Constructors in Hierarchy

我正在制作超级class食物,有两个子class:晚餐和早餐。晚餐和早餐各有两个子class,晚餐有海鲜和鸡肉菜肴,早餐有麦片和煎蛋。现在我只编写了 Food 和 Dinner,但是当我尝试在 main 中编写时,它说我的构造函数未定义。

这是我的超级美食class:

public class Food {
private double price;
private int calories;
private boolean vegan;

public Food(double price, int calories, boolean vegan){
    this.price = price;
    this.calories = calories;
    this.vegan = vegan;
}

public double getPrice(){
    return price;
}

public int getCalories(){
    return calories;
}

public boolean getVegan(){
    return vegan;
}

}

这是我的晚餐子class:

public class Dinner extends Food{

public Dinner(double price, int calories, boolean vegan){
    super (price, calories, vegan);
}

}

为了保持这个问题的开放性,我只是在寻找一个更概念化的答案,以便它可以适用于其他人的问题。如何为 super/subclass 创建构造函数以及如何在 main 中使用它?谢谢大家

P.S.: 我知道我可以删除 "public Food" 构造函数并在 main 中写入 "Food x = new Food;" 但是我的 comp sci 老师要求你在每个 [=39] 中都有一个构造函数=]:超级或次级。

编辑:目前我的主要方法是:

public class Main {
public static void main(String[] args){
    Food x = new Food();

}

}

我得到 "The constructor Food() is undefined"。我知道我可能遗漏了 something/doing 它错了,所以我只是在寻找有关如何实际完成此任务的指导。

不止一种constructors

一种是default constructor

public Food(){

}

每当创建 class 的对象时都会调用它。在这种情况下,如果您创建 Food class 的对象(如

),将从 main 调用此构造函数
Food obj = new Food();

你在Foodclass中定义的那个叫做parameterized constructor

public Food(double price, int calories, boolean vegan){
    this.price = price;
    this.calories = calories;
    this.vegan = vegan;
}

当您创建 Food class 的对象时将调用此构造函数,例如

Food obj = new Food(20.22, 10, true);

您需要将值作为参数传递才能调用此构造函数。

注意调用哪个构造函数取决于你是否在构造函数调用中传递参数值。

您遇到错误是因为在您的 main 方法中

public class Main {
public static void main(String[] args){
    Food x = new Food();
}

您正在调用 Food class 的默认构造函数,但在 Food class 中,您定义了一个 parameterized constructor,它需要 3 个参数.

您需要在创建 class Food 的对象时传递这些参数 例如

Food obj = new Food(20.22, 10, true);