【发布时间】:2020-10-19 06:40:51
【问题描述】:
我正在创建一些飞行对象数组的 Java 代码,它们都有一个属性 price (double)。我对继承有点陌生,这是我第一次使用 super 关键字。当我在数组中创建一个子类对象 Airplane 时,价格特征似乎没有正确地通过构造函数。
这是我的 FlyingObject 构造函数:
公共类 FlyingObject {
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。我做错了什么我错过了?任何帮助将不胜感激。
编辑:发现我做错了什么。愚蠢的错误。
在我的 Airplane 类中,我将 price 重新定义为实例变量并忘记了它,这覆盖了 FlyingObjects 中的 price。
只要我取出那个额外的价格变量并且只有价格变量来自超类(如预期的那样),那么一切正常。
下次将发布更好的示例(可重复)。干杯
【问题讨论】:
-
这能回答你的问题吗? stackoverflow.com/questions/51845169/…
-
无关:没有两个构造函数做不同的事情。让 FlyingObect 中的无参数构造函数调用 other 构造函数,例如
this(0)! -
除此之外,请提供真实的minimal reproducible example。您显示的代码看起来正确。所以请给我们显示问题的代码。你看,你对你的代码做了假设(正确注册),但是如果你对代码的假设都是正确的,你就不会在这里寻求帮助。所以,请:编辑您的问题并添加更多代码。
-
大家好,很抱歉尚未熟悉此处提问的最佳实践。我将确保在将来包含一个最小的可重现示例。感谢大家的回答。我将在今天晚些时候查看代码,看看是否可以让代码重新出现在这个可重现的小示例中。随意关闭这个问题,如果问题仍然存在,我可以重新发布它,尽管使用正确的示例。
标签: java constructor super