Java-在子类中使用super时缺少属性

Java-在子类中使用super时缺少属性,java,constructor,super,Java,Constructor,Super,我正在创建一些飞行对象数组的Java代码,它们都有一个属性price(double)。我对继承有些陌生,这是我第一次使用super关键字。当我在数组中创建一个子类对象时,price特性似乎没有正确地通过构造函数 以下是我的FlyingObject构造函数: // CONSTRUCTORS public Airplane () { super(); brand = "Unknown brand"; horsepower = 0; } public A

我正在创建一些飞行对象数组的Java代码,它们都有一个属性price(double)。我对继承有些陌生,这是我第一次使用super关键字。当我在数组中创建一个子类对象时,price特性似乎没有正确地通过构造函数

以下是我的FlyingObject构造函数:

// CONSTRUCTORS

public Airplane ()
{
    super();
    brand = "Unknown brand";
    horsepower = 0;
}

public Airplane (String aBrand, double aPrice, int aHorsepower)
{
    super(aPrice);
    brand = aBrand;
    horsepower = aHorsepower;
}
公共类飞行对象{

protected double price;

public FlyingObject()
{
    price = 0;
}

public FlyingObject(double aPrice)
{
    price = aPrice;
}
下面是我的飞机建造师:

// CONSTRUCTORS

public Airplane ()
{
    super();
    brand = "Unknown brand";
    horsepower = 0;
}

public Airplane (String aBrand, double aPrice, int aHorsepower)
{
    super(aPrice);
    brand = aBrand;
    horsepower = aHorsepower;
}
当我用参数String、double和int创建飞机时,字符串(品牌)和int(马力)被正确注册,但价格保持在0。是否有我明显做错的事情我错过了?任何帮助都将不胜感激

编辑:发现我做错了什么。愚蠢的错误

在我的飞行类中,我重新定义了price作为一个实例变量,并忘记了它,它从FlyingObjects中重写了price

当我取出那个额外的价格变量,并且只让价格变量来自超类(如预期的那样),那么一切都很好


下一次将发布更好的示例(可复制)。干杯

我不确定您遇到的问题是什么。我刚刚在jshell中试用过,似乎效果很好:

public class FlyingObject {
    protected double price;

    public FlyingObject() { price = 0; }

    public FlyingObject(double aPrice) { price = aPrice; }
}

public class Airplane extends FlyingObject {
    int horsepower;
    String brand;

    public Airplane() { 
        super(); 
        brand = "Unknown brand";
        horsepower = 0;
   }

   public Airplane(String aBrand, double aPrice, int aHorspower) {
        super(aPrice);
        brand = aBrand;
        horsepower = aHorsepower;
   }
}
如果我然后调用
plane=new plane(“波音”,500000,800);
我得到一个飞机对象,结果是
plane.price
=500000

此外,您可能需要考虑(而不是在<构造函数> <代码> >“马力> <代码> >”中使用“<代码>马力< /代码>和<代码>品牌>代码>,然后使用<代码>此< /COD>关键字如下:

public Airplane(String brand, double price, int horsepower) {
    super(price);
    this.brand = brand;
    this.horsepower = horsepower;
}

这回答了你的问题吗?无关:不要让两个构造函数做不同的事情。让FlyingObect中的无参数构造函数调用另一个构造函数,比如
this(0)
相反!除此之外,请提供一个真实的。您显示的代码看起来是正确的。因此,请给我们显示问题的代码。您知道,您对代码进行了假设(正确注册),但是,如果您对代码的假设都是正确的,您就不会在这里寻求帮助。因此,请:编辑您的问题并添加更多代码。大家好,很抱歉还不熟悉在这里提问的最佳实践。我将确保在将来包含一个最小的可复制示例。感谢大家的回答。我我将在今天晚些时候查看代码,看看是否可以使代码在这个小的可复制示例中重新出现。请随意关闭此问题,如果问题仍然存在,我可以重新发布它,尽管使用正确的示例。我感谢您为帮助提问者所做的努力,但很好:“无法重新设置问题”这清楚地表明这个问题应该结束,而不是回答。我已经写了一篇关于这个问题的评论。因此,从这个角度来看:请了解一点人们应该如何/应该问什么。你看,这个问题将结束,除非OP改进它。然后可能会删除,你的回答很好。所以:花得更好在可以回答的问题上花费你的时间和精力。告诉OP“无法重新编程”这不是答案。哦,好的。谢谢你的建议!Ben Rosenberg,非常感谢你的回答。正如我上面提到的,我的帖子似乎不遵守提供可复制示例的指导原则,所以我已经告诉mods,如果他们愿意,他们可能会关闭它,我会查看我的代码并尝试复制示例。如果问题仍然存在,我会将创建一个新的(更正确的表述)帖子。但我想感谢您的关注。也许我的问题来自于通过我的驱动程序类实现该类,尽管我还不确定原因。无论如何,感谢您的关注,非常感谢。