继承和ArrayList中的对象

时间:2018-10-18 09:15:23

标签: java object inheritance

好的。我在这门Java方面还很陌生,但我极力尝试学习。我遇到了一些死胡同。我正在做一个学校的库存计划,我有一个带有4个实例变量的超类Items。没问题。我有4个子类,其中两个是强制性的Food类,具有两个进一步的变量,而Nonfood类则具有另一个变量。我的问题是这个。

现在我正在使用ArrayList(这是我到目前为止所知道的),但是我正在认真考虑使用地图或linkedMap。

我已经将ArrayList基于我的超类项,但是我无法将子类变量放入ArrayList中。任何想法如何做到的。使用相对简单的解决方案(请记住我是新手)

我还没有我的身份证工作。本着商店术语的精神,我将其称为barCode。这是我的超类的一部分,我似乎无法在主类中对其进行初始化。

//constructer from superclass

public Items (int barCode, String itemName, String itemSupplier, double itemPrice, int stock)
{
    this.itemName = itemName;

    barCode = GenerateBarCode();

    this.itemSupplier = itemSupplier;

    this.itemPrice = itemPrice;

    this.stock = stock;

// getter method for barCode

protected int getBarCode()
{
    return barCode;
}

// method for generating barcode

private int GenerateBarCode()
{
    Random barCode = new Random();    

    int barCode1 = barCode.nextInt(100000);
    return barCode1;
}

如果我需要更多代码,请告诉我。我正在努力使其更漂亮。

1 个答案:

答案 0 :(得分:1)

构造函数中有一个局部变量barCode,它正在隐藏您的实例成员(也称为barCode)。参数实际上是局部变量,局部变量优先于字段。此局部变量获取随机值,然后像所有局部变量一样在构造函数的末尾消失,使您的字段也被称为barCode及其原始值。

您可以通过将参数更改为barCodeIn或将语句更改为this.barCode = GenerateBarCode()

来解决此问题。

但是,真正的解决方案是从项目构造函数中删除barCode参数。

由于是使用GenerateBarCode()函数生成的,因此您实际上不需要从外部传递它。