2017-02-06 12 views
0

私はスーパークラスのFoodを2つのサブクラス、すなわちDinnerとBreakfastで作成しています。ディナーと朝食にはそれぞれ2つのサブクラスがあり、ディナーにはシーフードとチキンディッシュが、朝食にはシリアルとオムレットがそれぞれ用意されています。今私は食べ物と夕食だけをプログラムしていますが、メインでプログラムしようとすると、私のコンストラクタは定義されていません。未定義の階層構造のコンストラクタ

ここでは私の食品スーパーである:

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

}

オープンエンドのこの質問を保つために、私はより概念的な答えを探しているだけなので、他の人の質問にも適用できます。どのようにスーパー/サブクラスのコンストラクタを作成し、それをメインでどのように使うのですか?皆さんありがとう。

P .:私は "public food"コンストラクタを削除して "Food x = new Food;"と書くことができます。メインではありますが、私のComp Sci教師は、すべてのクラスにスーパーまたはサブのコンストラクタがあることを要求します。

EDITは:私の主な方法は、現在、次のとおりです。

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

} 

}

がどの私は "コンストラクタ食品()が定義されていません" を取得します。私はおそらく何かが欠けている/それを間違っていることを知っているので、私は実際にこのタスクを完了する方法のガイダンスを探しています。

+0

あなたが得る正確なエラーメッセージは何たとえば

のクラスFood のオブジェクトを作成するときは、これらの引数を渡す必要が

? – Nic

+0

クラスをコピーしてペーストし、メインメソッドでコーディングに問題がないので、より多くのコンテキストを提供するつもりです –

+0

ここで 'main'メソッドのポストコード – Yousaf

答えて

0

constructorsの複数のタイプがあります。

一つのタイプは、あなたのクラスのオブジェクトが作成されるたびにそれが呼び出されdefault constructor

public Food(){ 

} 

です。あなたは

Food obj = new Food(); 

と呼ばれますがFoodクラスで定義されているもののようあなたのFoodクラスのオブジェクトを作成する場合は、この場合、このコンストラクタは、mainから呼び出されますparameterized constructor

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

このコンストラクタはなりますあなたのクラスのオブジェクトを作成するときに呼び出される

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つの引数を期待parameterized constructorを定義しているので、あなたは、エラーを取得しています。

Food obj = new Food(20.22, 10, true); 
関連する問題