0

目的是能够将包含与库存水平有关的信息的文本文件中的数据读取到对象中,然后以各种方式操作该对象,文本文件中的字段由“#”分隔。文本文件在一行上有 3 个字段或在一行上有 5 个字段。带有 3 个字段的行进入我的超类的构造函数 带有 5 个字段的行读入子类

超类称为 StockItem,子类称为 StockItemFood,它扩展 StockItem(超类)。

下面是我的代码,在一个单独的“Manager”类中找到,该类从文本文件中读取到 StockItem 对象数组中。很简单。

public void readFromText() throws IOException, FileNotFoundException{
    String [] temp;
    BufferedReader br = new BufferedReader (new FileReader("stocklist.txt"));
    String line = br.readLine();

    while(line!=null){
        temp=line.split("#");

        if (temp.length==3){
            s[counter]=new StockItem(temp[0], (double) Integer.parseInt(temp[1]), temp[3]);
        }else if (temp.length==5){
            s[counter]=new StockItemFood(temp[0], (double) Integer.parseInt(temp[1]), temp[2], (double) Integer.parseInt(temp[3]), (double) Integer.parseInt(temp[4]));
        }
    }

    counter++;
    br.close();
}

在下面的方法中,我试图返回一个字符串,该字符串将与从超类中返回的方法和从子类中的方法返回相连接。但是,当我键入 s[y] 时,我看不到我的子类方法。如下所示。

public String getOrderingList(){ 
    String toOrder="";

    for(int y = 0; y < s.length; y++){
        toOrder+=s[y].getDescription() + s[y].//getOrderAmount() <-subclass method          
        }
    }

    return toOrderl
}

下面是我的子类的代码:

public class StockItemFood extends StockItem {

private double min,max; //3.2

public StockItemFood(String description, double quantity, String units,double min, double max) { //3.3
    super(description, quantity, units);
    this.min = min;
    this.max=max;
}

public boolean mustOrder(){ //3.4
    boolean b;

    if(getQuantity()<min){
        b=true;
    } else {
        b=false;
    }
    return b;
}

public double getOrderAmount(){ //3.5
    double amount = max-getQuantity();
    return amount;
}

}

我想也许可以使用 instanceof,但我并不完全确定所需的语法,而且我还阅读了几篇建议避免使用 instanceof 的帖子。

任何帮助将非常感激。- 肖恩

4

2 回答 2

0

仍然不清楚您的解释,给出的解决方案是基于一个微弱的理解,通过编辑您的问题进一步解释,也许会提供更好的解决方案。

假设s是一个 SuperClass 类型的数组

String toOrder = "";
for(int y=0;y<s.length;y++){
  toOrder+=s[y].superClassMethod();

  if(s[y] instanceof subclass) {
    toOrder+= ( (SubClassName)s[y]).subClassMethod();
  }
}

会为你工作

于 2013-09-14T16:06:11.587 回答
0
abstract class StockItem{

     protected abstract double getOrderAmount();


     public String getOrderingList(){
          String result = method(); //can invoke it
     }
}

class StockItemFood extends StockItem{
   @Override
   protected double getOrderAmount(){
      //return the value
   }
}

Java中的抽象关键字

我不知道我是否完全理解了你的问题。但我会尽力回答。在基类中getOrderAmount()创建方法。abstract

如果StockItem您的设计中的每一个都将有一个订单金额,那么您应该在您的类中将其定义为抽象方法StockItem

我还阅读了几篇建议避免使用instanceof的帖子。

是的,确实如此,您应该避免使用 instanceof,因为这意味着您的代码没有适当的设计。

于 2013-09-14T16:00:00.907 回答