我想在OOP中建模以下情况:
我希望Freight类成为抽象类,因为我希望我的程序根据一件 cargo 所具有的危险程度收取一些额外费用。
实际上,我遇到的问题是我希望Freight类是对象数组。我的意思是说它可以存放行李和 cargo 。我的问题是我可以在哪里放置方法调用addItem?我应该把它放在行李和 cargo 类中吗?还是应该将一个名为addItem的通用抽象方法放入Freight类?这样的事情(我为此目的使用Java):
abstract class Freight{
//other things here
protected Freight[] fr=Freight[10];
protected int numItems;
abstract addItem();
}
class PieceOfLuggage extends Freight{
//other things
public PieceOfLuggage(int iden,double weight,int id){
super(iden,weight,id)
}
public addItem(){
fr[numItems]=this;
numItems++;
}
}
class PieceOfCargo extends Freight{
private degreeHazard;
public PieceOfCargo(int iden,double weight,int id,int degHazard){
super(iden,weight,id);
degreeHazard=degHazard;
}
public addItem(){
fr[numItems]=this;
numItems++;
}
}
这样我就可以在主程序中执行以下操作:
Luggage l1=new Luggage(100,50,1234); //ident, weight, id
Cargo c1=new Cargo(300,123.56,1111,1); //ident, weight, id, degree of hazard
l1.addItem();
c1.addItem();
有什么建议我可以在哪里放置那个addItem方法?,以便让Freight类包含一系列行李和 cargo 类型的对象?
谢谢
最佳答案
如果希望Freight
能够保留其他类型,则可以使用以下三个选项:
使每个类扩展Freight
:
class Luggage extends Freight
或者
给
Freight
每个数组:class Freight
{
Luggage[] luggage = new Luggage[10];
Cargo[] cargo = new Cargo[10];
addItem(Luggage luggage){...}
addItem(Cargo cargo){...}
}
或者
使
Luggage
和Cargo
扩展基类并将其放在Freight
中: class DeliveryItem
{
addItem(DeliveryItem item){...}
}
class Luggage extends DeliveryItem
{
//override addItem if need be
}
class Freight
{
List<DeliveryItem> items = new ArrayList<DeliveryItem>();
List<DeliveryItem> getItems()
{
return this.items;
}
void addItem(DeliverItem item)
{
this.items.add(item);
}
}