我应该使用抽象类加子类还是ENUM或抽象类加接口?

问题描述 投票:0回答:1

正在解决这样的任务 创建一棵树,然后创建一棵橡树、无花果树、松树、苹果树、橙树...... 请记住,有些树可以结出果实。 然后创建一个有树木的森林,并在发生火灾时让所有果树消失。

所以我所做的是我有一个抽象类 Tree 和一个接口 Fruitable 取决于我刚刚扩展或扩展并实现我的接口的树类型。 我看到的唯一缺点是我过于手动地将 List 放入实现 Fruitable 的树中。 我对还是不对? 我班上的一些人告诉我他们使用枚举来表示树的类型。

java class inheritance interface polymorphism
1个回答
0
投票

您不需要手动放置实现

Fruitable
的树列表。您可以在运行时使用
instanceof
检查来确定。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Tree {
}

interface Fruitable {
}

class Oak extends Tree {
}

class Fig extends Tree implements Fruitable {
}

class Pine extends Tree {
}

class Apple extends Tree implements Fruitable {
}

class Forest {
    List<Tree> forest = new ArrayList<>(Arrays.asList(new Oak(), new Apple(), new Fig(), new Pine()));
    public void fire() {
        for (int i = 0; i < forest.size(); i++) {
            Tree t = forest.get(i);
            if (t instanceof Fruitable) {
                forest.remove(t);
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.