0

我有一个扩展建筑的 BetterBuilding 类和一个扩展 Elevator 的 BetterElevator 类。Building 在其构造函数中使用 Elevator 对象填充数组 Elevator[] 电梯。现在,我正在尝试创建 BetterBuilding 构造函数,如下所示:

public BetterBuilding(File f) {
    super(f);
    for(int i=0; i<elevatorNum; i++) {
        elevators[i] = new BetterElevator(20);
    }
    System.out.println(elevators[0].test());
}

所以基本上,我尝试使用超类构造函数,然后将电梯数组的内容更改为现在在位置 0 上包含一个 BetterElevator。但是,当我尝试调用电梯 [0].test() 时,我收到一条错误消息电梯[0] 是一个电梯(test() 是一种仅适用于 BetterElevators 的方法)。我究竟做错了什么?提前致谢!

4

1 回答 1

0

因此,您的 Building 类包含一个电梯数组。由于 BetterElevator 是 Elevator(继承!),因此将 BetterElevator 分配给 Elevator-Array 没有问题。

但是,当您在 Building 中访问 Array 时,Array 的类型是常见的 Elevator 类型,而与包含的数组的实际类型无关。

要访问 BetterElevators 的方法,您必须首先从 Elevator 中转换它。

由于可能存在 EvenBetterElevators,建议首先使用 instanceof 检查类型,否则您将在运行时冒 ClassCastExceptions 的风险:

if (building.elevators[0] instanceof BetterElevator) {
  ((BetterElevator)elevator).test(); 
}
于 2015-10-31T20:32:42.877 回答