如何将子类类型的元素添加到以超类为元素类型的数组中



我有一个扩展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。但是,当我尝试调用电梯[0].test()时,我得到一个错误,说电梯[0]是电梯(test()是一个只对BetterElevators可用的方法)。我做错了什么?提前感谢!

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

但是,当您访问Building中的Array时,无论包含的数组的实际类型如何,该数组的类型都是普通类型Elevator。

要访问BetterElevators的方法,您必须首先从电梯中铸造它。

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

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

相关内容

最新更新