如何检查ArrayList的对象(java)

如何检查ArrayList的对象(java),java,inheritance,arraylist,interface,instanceof,Java,Inheritance,Arraylist,Interface,Instanceof,我有一个抽象类Rental…我还有两个子类SuiteRental和SimpleRoomRental继承了Rental类。我在一家三等酒店(和其他酒店并没有联系)有一个ArraList,它包含SimpleRoomRental和SuiteRental两个对象 所以,我想检查每个对象(可能带有的实例),但我不能创建一个出租对象(因为它是抽象类)。我应该声明什么类型的“k”对象 有什么想法吗 public void calculateTotalRentalFees (){ double p

我有一个抽象类Rental…我还有两个子类SuiteRental和SimpleRoomRental继承了Rental类。我在一家三等酒店(和其他酒店并没有联系)有一个ArraList,它包含SimpleRoomRental和SuiteRental两个对象

所以,我想检查每个对象(可能带有的实例),但我不能创建一个出租对象(因为它是抽象类)。我应该声明什么类型的“k”对象

有什么想法吗

public void calculateTotalRentalFees (){

      double price=0; 

      for (int i=0; i<rentals.size(); i++){

          if (k instanceof SimpleRoomRental){
            SimpleRoomRental y= new SimpleRoomRental();
            price=price + y.calculateCost();

          }else if(k instanceof SuiteRental){
              SuiteRental z=new SuiteRental();
              price=price + z.calculateCost();

          }

      }
  }
}


感谢您的时间

通过使用接口,您还可以同时处理这两个问题,这就是使用多态性的好处,对于该方法,它们甚至可以有不同的实现

RoomRental rental = new SimpleRoomRental(); 
// You can use too: new SuiteRental();
price = price + rental.calculateCost();

不能使用
new
创建Rental实例并不意味着不能使用Rental类型的变量。请注意,instanceof检查是无用的。只需在Rental中添加calculateCost()抽象方法。您完全忽略了继承和多态性的要点。请将其声明为
ArrayList
中声明的任何类。那么
rentals
的类型是什么?请注意,您几乎肯定希望将
k
转换为
simpleroomrent
SuiteRental
而不是创建新实例。。。我想您最好使用增强的
for
循环。但你甚至需要投下它们吗?
rent
没有
calculateCost()方法吗?听起来它应该有,如果
rentals
是一个
ArrayList
,这就是你所需要的。但是,从根本上说,我们需要一个提供更多信息的列表…@JonSkeet“rentals”的类型是“ArrayList”。Rental没有“calculateCost()”,因为我必须以某种方式使用interface!但是我应该如何检查ArrayList的当前对象是SimpleRoomRental还是SuiteRental/你应该使用arrayList.get(i)然后。。因为在您的示例中,您使用的是
new
RoomRental rental = new SimpleRoomRental(); 
// You can use too: new SuiteRental();
price = price + rental.calculateCost();