public int getPassengerCount() {
int counter = 0;
for (TrainCar vogn : YOLO) {
if (vogn.getClass() == PassengerCar.class) {
counter += ((PassengerCar) vogn).getPassengerCount(); //This line
}
} return counter;
}
在这段代码中,我遍历了
Arraylist
的TrainCars
。两种
TrainCars
类型; PassengerCar
或CargoCar
。因此,首先我检查旅行车是否是类PassengerCar
的实例(并且我知道instanceof
,但我认为这种方式也可行?),如果是,则需要获取包含乘客人数,即方法getPassengerCount()
。但是,在标记的行中,有一些我不完全了解的代码。我意识到我不能写
vogn.getPassengerCount()
,因为“ vogn”可能是CargoCar
或PassengerCar
。再说一次,我在if子句之后进行,所以它不会导致错误。那为什么不能呢?为什么这是唯一可行的方法,它有什么作用?我从未见过这样的语法,老实说,我不知道对Google有什么了解。有什么建议吗? :-) 最佳答案
方法在编译时根据调用它们的表达式的静态/声明类型进行解析。
如您所述,getPassengerCount()
方法仅存在于PassengerCar
类型上。这样,您只能在解析为PassengerCar
实例的表达式上调用该方法。您可以通过将类型为TrainCar
的变量转换为更具体的PassengerCar
来实现。
((PassengerCar) vogn)
仅当您知道
vogn
引用PassengerCar
时,才执行此操作,否则将得到ClassCastException
。