我是 Java 和 OOP 概念的新手,我在这方面遇到了麻烦。
我在
Train
类(它关联 TrainCar
类)中有这个函数,我在其中运行 for 循环来循环访问 TrainCar
类型的对象数组。 TrainCar
是继承AdminCar
类的父类,TrainEngine
类进一步继承TrainEngine
类。
TrainCar
类有一个getter getPower,AdminCar
或totalPower += car.getPower();
没有。
当我想访问该方法时,IntelliJ 建议我将totalPower += ((TrainEngine) car).getPower();
更改为 public double getMaxAccel() {
double totalPower = 0;
double totalWeight = 0;
for (TrainCar car: trainCar) {
totalWeight += car.getWeight();
if (car instanceof TrainEngine) {
totalPower += ((TrainEngine) car).getPower();
}
}
}
。我不知道这一行的含义和作用。如果你们能解释一下,我将非常感激。
这称为
(类型)铸造。
根据您的描述,我相信TrainCar
类 extends
getPower
类和 TrainEngine
方法存在于 TrainCar
子类中。
当您引用car instanceof TrainEngine
时,它可以是扩展它的任何类。因此,通过检查 TrainCar
,您可以检查 TrainEngine
引用是否实际上是 TrainCar
的实例,如果是,您可以 cast存储为
TrainEngine
引用的对象。
if (car instanceof TrainEngine) {
TrainEngine trainEngine = (TrainEngine) car;
}
注意:您不是在此处创建新对象。您只是访问与
TrainEngine
(子类)相同的对象。
现在使用 trainEngine 局部变量,您可以访问
TrainEngine
类上的所有方法,因此您可以访问 getPower
方法。
if (car instanceof TrainEngine) {
TrainEngine trainEngine = (TrainEngine) car;
totalPower += trainEngine.getPower();
}
IDE 的建议是将强制转换和调用
getPower
方法合并在一行中。
totalPower += ((TrainEngine) car).getPower();