如何检查ArrayList的对象(java)
我有一个抽象类Rental…我还有两个子类SuiteRental和SimpleRoomRental继承了Rental类。我在一家三等酒店(和其他酒店并没有联系)有一个ArraList,它包含SimpleRoomRental和SuiteRental两个对象 所以,我想检查每个对象(可能带有的实例),但我不能创建一个出租对象(因为它是抽象类)。我应该声明什么类型的“k”对象 有什么想法吗如何检查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
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();