我有一个扩展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的方法)。我究竟做错了什么?提前谢谢!
答案 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();
}