我试图遍历所有扩展相同父类的不同类型的多个对象。例如:

ArrayList<Enchant> enchants = new ArrayList<>();


附魔数组的内部将是扩展Enchant类的类的对象。

例如:

public class JumpBoost extends Enchant{
    public static Item generateItem(){
        return something;
    }
}


附魔ArrayList中的每个对象都有一个称为generateItem()的方法。

我想循环使用:

for(Enchant enchant : enchants){
    enchant.generateItem()
}


我已经尝试过这样做,但是由于Enchant类没有generateItem()方法而没有运气。

我本质上只需要一种分组和遍历不同类型的多个对象的方法。

最佳答案

您可以使用多态来解决该问题。
首先使用generateItem()方法定义基类/抽象类/接口,派生指定的类并重写/实现generateItem()方法。
这是带有接口的实现:

interface Base{
    void generateItem();
}
class Derived1 implements Base{
    @Override
    public void generateItem() {
        System.out.println("generateItem() from Derived1");
    }
}
class Derived2 implements Base{
    @Override
    public void generateItem() {
        System.out.println("generateItem() from Derived2");
    }
}
class Main {
    public static void main(String[] args) {
        List<Base> list = new ArrayList<>();
        list.add(new Derived1());
        list.add(new Derived2());
        list.forEach(Base::generateItem);
    }
}


输出为:

generateItem() from Derived1
generateItem() from Derived2


有关更多信息,您可以阅读有关多态性here的信息。

关于java - Java继承,遍历每个子类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39940049/

10-10 16:13