尝试使用抽象类进行模块化

时间:2015-12-12 20:30:49

标签: java inheritance

我一直在学习模块化代码,我自己也在努力解决一段时间以来遇到的问题。我有两个抽象类,这两个类都有多个子类。其中一个类尝试创建一个hashmap来存储另一个抽象类的所有子类的对象。但是,如果我有一些单独的方法,我不能在存储在hashmap中的对象上调用它们,因为它们的类型不同。如何在保持代码模块化的同时解决这个问题?

第一个抽象类中的hashmap:

protected Map<Ruler, List<Nation> nations = new HashMap<Ruler, List<Nation>();

然后,其中一个子类中的代码试图在“Nation”列表中的对象上调用一个方法,该方法仅存在于Nation的一个子类中。我该如何解决这个问题?

带有hashmap的抽象类:

public abstract class Ruler {

    protected Ruler ruler;
    protected Map<Ruler, List<Nation> nations = new HashMap<Ruler, List<Nation>();

    public Ruler(Ruler ruler) {
        super();
        this.ruler= ruler;
        this.ruler.put(ruler, new ArrayList<Nation>());;
    }
}

public class Government extends Ruler {
    public Government(Ruler ruler) {
        super(ruler);
    }

    public double totalGovernmentCost() {
        double cost = 0;
        for (Nation nation : this.nations.get(ruler)) {
            cost += nation.calculateGovernmentCost();
        }
    }
}

然后是第二个抽象类'Nation'。与统治者大致相同。但是使用'calculateGovernmentCost()'方法的子类是GovernmentNation。我得到的错误是:

nation.calculateGovernmentCost();

它表示'calculateGovernmentCost()'未定义为Nation类型。

0 个答案:

没有答案