如何将子类类型的元素添加到具有超类作为元素类型的数组中?

时间:2015-10-31 19:34:31

标签: java arrays subclass datafield

我有一个扩展Building的BetterBuilding类,以及一个扩展Elevator的BetterElevator类。在其构造函数中,构建使用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。但是,当我尝试调用elevators [0] .test()时,我得到了一个错误说电梯[0]是电梯(test()是一种只适用于BetterElevators的方法)。我究竟做错了什么?提前谢谢!

1 个答案:

答案 0 :(得分:0)

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

但是,当您在构建中访问Array时,Array的类型是常见类型Elevator,而不管所包含的数组的实际类型如何。

要访问BetterElevators的方法,您必须先从Elevator投射它。

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

if (building.elevators[0] instanceof BetterElevator) {
  ((BetterElevator)elevator).test(); 
}