好的。我在这门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;
}
如果我需要更多代码,请告诉我。我正在努力使其更漂亮。
答案 0 :(得分:1)
构造函数中有一个局部变量barCode
,它正在隐藏您的实例成员(也称为barCode)。参数实际上是局部变量,局部变量优先于字段。此局部变量获取随机值,然后像所有局部变量一样在构造函数的末尾消失,使您的字段也被称为barCode
及其原始值。
您可以通过将参数更改为barCodeIn
或将语句更改为this.barCode = GenerateBarCode()
但是,真正的解决方案是从项目构造函数中删除barCode参数。
由于是使用GenerateBarCode()函数生成的,因此您实际上不需要从外部传递它。