【问题标题】:Undefined Constructors in Hierarchy层次结构中的未定义构造函数
【发布时间】:2017-02-06 03:16:53
【问题描述】:

我正在制作一个包含两个子类的超类食物:晚餐和早餐。晚餐和早餐各有两个子类,晚餐有海鲜和鸡肉,而早餐有麦片和煎蛋。现在我只编程了食物和晚餐,但是当我尝试在 main 中编程时,它说我的构造函数是未定义的。

这是我的 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);
}

}

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

P.S.:我知道我可以删除“public Food”构造函数并编写“Food x = new Food;”在 main 但我的 comp sci 老师要求你在每个类中都有一个构造函数:super 或 sub。

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

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

}

}

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

【问题讨论】:

  • 您得到的确切错误信息是什么?
  • 您将提供更多上下文,因为我复制并粘贴了您的类并且在我的主要方法中编码没有问题
  • 这里main方法的邮政编码
  • 好吧,如果我执行“Food x = new Food();”,那么我会得到“构造函数 Food() 未定义”。我知道我可能做错了,所以我只是在寻找有关如何使用每个子类中的构造函数完成此任务的概念指导。
  • 你没有无参构造函数,需要提供(double price, int calories, boolean vegan) eg:Food x = new Food(12, 1, false);

标签: java inheritance constructor hierarchy superclass


【解决方案1】:

constructors 的类型不止一种。

一种是default constructor

public Food(){

}

每当创建类的对象时都会调用它。在这种情况下,如果您创建 Food 类的对象,则会从 main 调用此构造函数,例如

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 类中,您定义了一个需要 3 个参数的 parameterized constructor

在创建 Food 类的对象时需要传递这些参数 例如

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

【讨论】:

    猜你喜欢
    • 2013-01-05
    • 2016-07-13
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-18
    • 2011-10-28
    相关资源
    最近更新 更多