我想在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){...}
}

或者

使LuggageCargo扩展基类并将其放在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);
     }
}

08-26 02:17