Java 如何将子类类型的元素添加到超类为元素类型的数组中?
我有一个扩展Building的BetterBuilding类和一个扩展电梯的BetterEvator类。建筑在其构造函数中用电梯对象填充阵列电梯[]电梯。现在,我尝试创建BetterBuilding构造函数,如下所示:Java 如何将子类类型的元素添加到超类为元素类型的数组中?,java,arrays,subclass,datafield,Java,Arrays,Subclass,Datafield,我有一个扩展Building的BetterBuilding类和一个扩展电梯的BetterEvator类。建筑在其构造函数中用电梯对象填充阵列电梯[]电梯。现在,我尝试创建BetterBuilding构造函数,如下所示: public BetterBuilding(File f) { super(f); for(int i=0; i<elevatorNum; i++) { elevators[i] = new BetterElevator(20); }
public BetterBuilding(File f) {
super(f);
for(int i=0; i<elevatorNum; i++) {
elevators[i] = new BetterElevator(20);
}
System.out.println(elevators[0].test());
}
公共BetterBuilding(文件f){
超级(f);
对于(inti=0;iSo),建筑类包含电梯数组。
因为BetterRelevator是电梯(继承!),所以将BetterRelevator分配给电梯阵列没有问题
但是,当您在建筑中访问阵列时,阵列的类型是公共类型电梯,而与所包含阵列的实际类型无关
要想获得更好的评价方法,你必须先从电梯里投下它
由于可能存在更好的评估者,建议先使用instanceof检查类型,否则在运行时可能会出现ClassCastException:
if (building.elevators[0] instanceof BetterElevator) {
((BetterElevator)elevator).test();
}
你试过了吗?你的代码在哪里?BetterElevator是电梯。所以你可以将BetterElevator存储在电梯数组中。我将编辑一些类代码。基本上,我在BetterElevator中加入了一个方法test(),当我调用building.lifests[]时。test()它说该类型电梯的方法测试无法识别。为什么测试仅适用于<代码>BetterEvator
?您可以使用一个名为<代码>可测试的接口,使用测试方法,然后您想要的任何对象都可以实现<代码>可测试。谢谢,这很有帮助!按照我的方式,这看起来确实有点多余我是否必须基本上将每个方法都包装在if/else中呢?那么,if(building.lifests[0]instanceof betterlevator{}else{}要使该方法同时适用于建筑有常规/更好的电梯的情况,我想,因为这样我就必须编写两次方法。已经谢谢了!不是真的。只适用于只存在于子类中的方法,并且您正在使用超类的类型。如果超级和子类都有相同的方法testA
yo因为方法重写,你也不必强制转换。我建议对多态性/类型层次结构/方法重写做一些研究,以使事情更清楚。