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

Java 层次结构中未定义的构造函数,java,inheritance,constructor,hierarchy,superclass,Java,Inheritance,Constructor,Hierarchy,Superclass,我正在制作一个超类食物,包含两个子类:晚餐和早餐。晚餐和早餐各有两个子类,晚餐有海鲜和鸡尾鱼,早餐有谷类和煎蛋。现在我只对食物和晚餐进行了编程,但当我尝试在main中编程时,它表明我的构造函数是未定义的 这是我的食物超类: public class Food { private double price; private int calories; private boolean vegan; public Food(double price, int calories, boolean ve

我正在制作一个超类食物,包含两个子类:晚餐和早餐。晚餐和早餐各有两个子类,晚餐有海鲜和鸡尾鱼,早餐有谷类和煎蛋。现在我只对食物和晚餐进行了编程,但当我尝试在main中编程时,它表明我的构造函数是未定义的

这是我的食物超类:

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

下面是我的晚餐子类:

public class Dinner extends Food{

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

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

附言:我知道我可以去掉“公共食品”构造器,然后写“食品x=新食品”;但我的comp-sci老师要求你在每堂课上都有一个构造器:超级或次级

编辑:我的主要方法是:

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

}
}


我得到“构造函数Food()未定义”。我知道我可能遗漏了什么/做错了什么,所以我只是在寻找如何实际完成这项任务的指导。

有多种类型的
构造函数

一种类型是
默认构造函数

public Food(){

}
public Food(double price, int calories, boolean vegan){
    this.price = price;
    this.calories = calories;
    this.vegan = vegan;
}
无论何时创建类的对象,都会调用它。在这种情况下,如果您创建了
Food
类的对象,则会从main调用此构造函数

Food obj = new Food();
Food obj = new Food(20.22, 10, true);
您在
食品
类中定义的一个称为
参数化构造函数

public Food(){

}
public Food(double price, int calories, boolean vegan){
    this.price = price;
    this.calories = calories;
    this.vegan = vegan;
}
当您创建
Food
类的对象时,将调用此构造函数,如

Food obj = new Food();
Food obj = new Food(20.22, 10, true);
要调用此构造函数,需要将值作为参数传递

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

您得到一个错误,因为在
main
方法中

public class Main {
public static void main(String[] args){
    Food x = new Food();
}
您正在调用
Food
类的默认构造函数,但在
Food
类中,您定义了一个
参数化构造函数,该构造函数需要3个参数

创建类
Food
比如说

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

您得到的确切错误消息是什么?您需要提供更多的上下文,因为我复制并粘贴了您的类,并且在我的主方法中从这里的
main
方法编写代码没有问题。如果我执行“Food x=new Food();”,那么我会得到“构造函数Food()未定义”。我知道我可能做错了,所以我只是在寻找如何在每个子类中使用构造函数来完成这项任务的概念指导。你没有无参数构造函数,你需要提供
(双倍价格,整数卡路里,布尔纯素)
例如:
食物x=新食物(12,1,false)