我知道在Java中由于继承,父类(super class)类型变量可以保存对子类对象的引用。例如,假设 ClassA 是 ClassB 的父类(super class)。您可以设置 ClassA[] 的元素来引用 ClassB 对象。我在使用子类的复制构造函数时遇到了问题。
public Items copyFromMasterInventory(String str){
Items itemToReturn = null;
int length = masterInventory.length;
int iterator = 0;
while (iterator < length){
String name = masterInventory[iterator].getName();
if (name.equals(str)){
if (name.getClass().equals(Collectible.class)){
itemToReturn = new Collectible(masterInventory[iterator]);
}
if (name.getClass().equals(Props.class)){
itemToReturn = new Props(masterInventory[iterator]);
}
}
}
return itemToReturn;
}
在本例中,共有三个类。元素、 Prop 和 Collection 品。 Prop 和 Collection 品是元素的子类。 masterInventory 是存储 Collectible 和 Props 对象的 Items 数组。此方法的目的是创建并返回 masterInventory 数组中的项目的副本。为了避免 .clone()
,我为 Collectible 和 Props 创建了复制构造函数。但我现在的方式显示了不兼容的类型错误,即 Items 无法转换为 Collectible 或 Props,即使存储在该元素中的对象是 Collectible 或 Props 对象。如果已经阅读和搜索了几个小时但似乎无法找到解决方案。有谁知道解决这个问题的方法吗?感谢所有帮助。
最佳答案
您可以向 Item 类添加一个抽象方法 Item getCopy()
,在 Props 和 Collectible 中实现它,并在 while 循环中调用它:
itemToReturn = masterInventory[iterator].getCopy();
这样做的好处是你不需要类里面的条件。
关于Java父类(super class)变量和子类复制构造函数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33825970/