将限定符转换为“TrainEngine”的含义?

问题描述 投票:0回答:1

我是 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(); } } }
。我不知道这一行的含义和作用。如果你们能解释一下,我将非常感激。
java oop multiple-inheritance
1个回答
0
投票

这称为

(类型)铸造

根据您的描述,我相信 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();
© www.soinside.com 2019 - 2024. All rights reserved.