【发布时间】:2017-02-13 07:37:56
【问题描述】:
由于应该测试我们对继承的理解的家庭作业,我有许多不同的子类,它们最终都具有相同的实例变量。在每个子类中,我都有一个方法printInfo() 打印所有实例变量。 printInfo() 在它存在的每个类中都完全相同,但我很确定我不能将它移动到任何父类,因为某些实例变量只存在于该子类中(也就是还包含printInfo())。根据我的阅读,我可以使用这样的父类创建一个包含每个对象的 ArrayList:
ArrayList<Parent> myArrayList = new ArrayList<Parent>;
myArrayList.add(new Child1());
myArrayList.add(new Child2());
我的问题是我希望能够在此 ArrayList 中的每个对象上调用 printInfo()。我尝试使用这样的 for 循环:
for(int i = 0; i < myArrayList.size(); ++i) {
myArrayList.get(i).printInfo();
}
但它不会识别我的printInfo() 方法,因为它只存在于子类中,而不存在于 ArrayList 使用的父类中。我假设这是因为 ArrayList 包含 Parent 类的对象,因此它不会调用子类的任何成员函数。有什么方法可以使用 ArrayList(或类似的数据结构)调用 printInfo() 方法吗?
注意:考虑到有多个子类具有相同的方法,我知道这个程序设计得很糟糕,但我被告知这正是作业所期望的。我不需要关于如何重组类的建议,我只想找到一种方法来有效地在不同类的多个对象上调用相同的方法。
【问题讨论】:
-
我也怀疑这个作业设计得不好。它可能是为了教你关于继承的知识。
-
我认为,为了使用继承而不是使用更适用的策略来构建易于阅读和维护的程序,必须在多个类中重用相同的代码是一项设计不佳的任务。
-
不清楚你复制了什么。如果您实际上自己复制了代码,那么当然,您可以将“共享”实例变量组合到一个公共类中
标签: java inheritance arraylist