2017-02-06 3 views
0

Я делаю суперкласс Продовольствие с двумя подклассами: Ужин и завтрак. Ужин и завтрак каждый будет иметь два своих подкласса, ужин будет иметь морепродукты и курятину, а завтрак будет иметь зерновые и омлеты. Сейчас я только программировал «Еда и ужин», но когда я пытаюсь программировать в основном, он говорит, что мои конструкторы не определены.Неопределенные конструкторы в иерархии

Вот мой Food суперкласса:

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.S .: Я знаю, что я мог бы просто удалить конструктор «Общественная еда» и написать «Продовольствие x = новая еда»; в основном, но мой учитель comp sci требует, чтобы у вас был конструктор в каждом классе: супер или под.

EDIT: Мой главный метод в настоящее время:

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

} 

}

, к которому я получаю "Конструктор 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); 
Смежные вопросы