Java父类(super class)变量和子类复制构造函数问题

标签 java inheritance subclass copy-constructor superclass

我知道在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/

相关文章:

Swift 协议(protocol)继承无法编译

php - 具有不同数量参数的子类构造函数

java - 使用路径列表从 SSH 查询大量文件

java - 克隆 Swing 组件

java - hibernate 一个iPOJO组件,全部禁用

inheritance - 类图转换为关系模型;继承和匹配表

Java 日期格式 : most convenient & elegant way to validate input date against multiple patterns

java - 在 Java 中重写泛型集合时出错

swift - 以编程方式访问 UIViewController 子类中 UIView 子类的成员

objective-c - 使用类别将数据添加到 UIView