Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将子类类型的元素添加到超类为元素类型的数组中?_Java_Arrays_Subclass_Datafield - Fatal编程技术网

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

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); }

我有一个扩展Building的BetterBuilding类和一个扩展电梯的BetterEvator类。建筑在其构造函数中用电梯对象填充阵列电梯[]电梯。现在,我尝试创建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());
}
公共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因为方法重写,你也不必强制转换。我建议对多态性/类型层次结构/方法重写做一些研究,以使事情更清楚。