2017-02-06 58 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);