Java 尝试使用抽象类进行模块化
我一直在学习模块化代码,我一直在努力解决一个我已经有一段时间的问题。我有两个抽象类,这两个类都有多个子类。其中一个类试图制作一个hashmap来存储另一个抽象类的所有子类的对象。但是如果我有一些子类所特有的方法,我就不能在hashmap中存储的对象上调用它们,因为它们不是同一类型的。如何在保持代码模块化的同时解决这个问题 第一个抽象类中的hashmap:Java 尝试使用抽象类进行模块化,java,inheritance,Java,Inheritance,我一直在学习模块化代码,我一直在努力解决一个我已经有一段时间的问题。我有两个抽象类,这两个类都有多个子类。其中一个类试图制作一个hashmap来存储另一个抽象类的所有子类的对象。但是如果我有一些子类所特有的方法,我就不能在hashmap中存储的对象上调用它们,因为它们不是同一类型的。如何在保持代码模块化的同时解决这个问题 第一个抽象类中的hashmap: protected Map<Ruler, List<Nation> nations = new HashMap<Rul
protected Map<Ruler, List<Nation> nations = new HashMap<Ruler, List<Nation>();
与类型Nation的“calculateGovernmentCost()”未定义相比较。发布类的声明。您的设计让我有点困惑。为什么
标尺
有一个从标尺
到列表
s的映射?为什么标尺
s引用了标尺
?回答这些问题将有助于决定什么是最佳设计。解决问题的简单方法是使用instanceof
检查和强制转换,但这不是很干净。泛型可能会让事情变得更清晰,如果我们能更多地了解您的设计约束的话。我需要一种模块化的方式(我认为一个映射可能会工作,但它没有)来拥有不同的统治者和国家的子类,我可以将不同的国家子类存储到统治者子类中。但目前我想不出一种方法来存储所有与单一统治者类型相关的国家(任何类型)。我这样做的问题是统治者子类无法访问Nation子类中的方法。很抱歉解释得不好。多亏了奥格雷。仿制药是一条出路。
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();