我有一个扩展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();
}