当前位置: 首页 > 知识库问答 >
问题:

在子类[closed]中使用super时缺少Java属性

微生青青
2023-03-14

编辑问题以包括所需行为、特定问题或错误以及再现问题所需的最短代码。这将帮助其他人回答这个问题。

我正在创建一些飞行物体数组的 Java 代码,它们都有一个属性价格(双倍)。我对继承有点陌生,这是我第一次使用超级关键字。当我在数组中创建一个子类对象 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;
}

当我用参数字符串、双精度和int创建飞机时,字符串(品牌)和int(马力)都被正确注册,但价格保持在0。我做了什么明显错误的事情,我错过了吗?任何帮助都将不胜感激。

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

在我的飞机类中,我将价格重新定义为一个实例变量,但忘记了它,它覆盖了 FlyingObject 的价格。

一旦我取出额外的价格变量并且只有价格变量来自超类(如预期的那样),那么一切正常。

下次会发布更好的示例(可重现)。干杯

共有1个答案

臧弘和
2023-03-14

我真的不确定你遇到的问题是什么。我刚刚在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;
   }
}

如果我然后调用< code > plane plane = new plane(" Boeing ",500000,800);我得到一个飞机对象,其结果是< code>plane.price = 500000。

顺便说一句,您可能需要考虑(而不是aHorsepowera品牌等)仅在构造函数中使用horsepower品牌,然后使用this关键字,如下所示:

public Airplane(String brand, double price, int horsepower) {
    super(price);
    this.brand = brand;
    this.horsepower = horsepower;
}
 类似资料:
  • LeetCode上有一个问题,要求你将一个多级双链接列表扁平化。我深陷其中,于是开始四处搜索。我为它找到了一个Java解决方案,但它没有意义。 给定的类没有任何构造函数(自定义),但在解决方案中,它们将它创建一个对象,就像它有一个自定义构造函数一样! 如下所示: 这怎么可能?这就像类有某种隐藏的构造函数一样!

  • 问题内容: C#具有用于声明和使用属性的语法。例如,可以声明一个简单的属性,如下所示: 也可以在属性中添加一些逻辑,如下所示: 无论是否具有逻辑,属性的使用方式与字段相同: 我对Java或C#都不陌生-我已经使用了很多东西,而且我总是想念Java中使用属性语法。我在这个问题中读到“在Java7中或将来几乎不可能添加属性支持”,但是坦率地说,我发现在讨论,论坛,博客,评论和JSR中需要挖掘太多的工作

  • 我有一个来自API的xml。 当我尝试使用simplexml\u load\u字符串或simplexmlement进行解析时,我得到了这个结果。 [广告]= 重要的是缺少我需要的url visibleurl属性。我试着在网上找,浪费了一整天来解决这个问题,但没有答案。有人能纠正我正在做的错误吗? PHP代码:

  • 我试图从属性中获取价值,但其中一些属性包含<代码> 例如: 我有3个tomcat属性

  • 在我的子组件中,我定义了道具接口,并将其包含在React中。组件。 然后需要将这些道具从父组件传递到子组件。到目前为止,一切都是合理的。。 但是,当我使用react router Typescript中的RouteComponents Props扩展Props接口时,也要求我传递“历史、位置、匹配”,我认为我不应该手动传递。。。 我不认为它与RouteComponentProps特别相关,因为在某

  • 这是我的。工作文件 作业失败,出现以下错误: 我用的是Azkaban 2.5和cdh5