2017-02-06 63 views
0

我正在制作超类食物有两个子类:Dinner and Breakfast。晚餐和早餐将分别拥有两个自己的小类,晚餐包括海鲜和鸡胸肉,而早餐包括麦片和煎蛋。现在我只编程食物和晚餐,但当我尝试在主要编程时,它说我的构造函数是未定义的。层次结构中未定义的构造函数

这里是我的菜超:

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

}

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

P.S .:我知道我可以删除“公共食品”的构造函数并编写“Food x = new Food”;在主要但我的计算机科学教师要求您在每个类中都有一个构造函数:super或sub。

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

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

} 

}

,而我得到 “构造食物()是不确定的”。我知道我可能错过了一些东西/做错了,所以我只是在寻找如何真正完成这项任务的指导。

+0

什么是你得到确切的错误消息,您需要将这些争论? – Nic

+0

你会提供更多的上下文,因为我复制和粘贴你的课程,并没有麻烦在我的主要方法编码 –

+0

邮政编码从这里'main'方法 – Yousaf

回答

0

有多种类型constructors

一类是default constructor

public Food(){ 

} 

只要创建你的类的对象调用它。在这种情况下,该构造将从主,如果您创建Food类的对象像

Food obj = new Food(); 

您在Food类中定义的一个被称为所谓的parameterized constructor

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

此构造将是当你创建你的对象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类,你定义了parameterized constructor其预计3个参数得到一个错误。

创建Food 类的对象时,例如

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