目的是能够从包含有关stocklevels的信息的文本文件中读取数据到对象中,然后以各种方式操作该对象 文本文件中的字段由“#”分隔。文本文件在一行上有3个字段,在一行上有5个字段。 3个字段的行进入我的超类的构造函数 带有5个字段的行将读入子类
超类称为StockItem,子类称为StockItemFood,它扩展了StockItem(超类)。
下面是我的代码,在一个单独的'Manager'类中找到,它从textfile读取到一个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();
}
在下面的方法中,我试图返回一个String,它将从超类中返回一个方法并从子类中的方法返回。但是当我输入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。
非常感谢任何帮助。 - 肖恩
答案 0 :(得分: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
}
}
我不知道我是否完全理解你的问题。但我会尽力回答。在基类中创建方法getOrderAmount()
为abstract
。
如果您设计中的每个StockItem
都有订单金额,那么您应该在类StockItem
中将其定义为抽象方法。
我还阅读了一些建议避免的帖子 的instanceof。
是的,您应该避免使用instanceof,因为这意味着您的代码没有正确的设计。
答案 1 :(得分: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();
}
}
将为您效劳