包含继承类的SuperClass的ArrayList

时间:2015-12-02 14:34:12

标签: java inheritance arraylist superclass

我们说我有一个A类,它有一些方法。然后我有一个扩展A的B类,但有一个额外的变量。现在我希望在另一个类中有一个A和B的ArrayList,这样当我遍历列表时,使用.getName()方法,我得到两个类的名称?我是否要创建ArrayList<A>并向其添加A和B的实例,还是创建ArrayList<Object>?对于ArrayList<Objects>,如何在不同对象上调用.getName()

2 个答案:

答案 0 :(得分:1)

您将创建ArrayList,其类型参数设置为A. B继承了A的所有属性和方法,这意味着您可以在B中访问它们的方式与在A中访问它们的方式完全相同。如果您想要要访问B中不存在的属性,您必须将其强制转换。例如,

df

如果您创建了一个对象的ArrayList,则必须将每个元素强制转换为所需的类。这几乎否定了泛型背后的想法,并且与创建没有类型参数的ArrayList没有什么不同。你应该避免这样做,以便你可以获得泛型给你的好处,例如在编译时输入错误而不是在运行时抛出异常。

答案 1 :(得分:0)

ArrayList<A>适用于A和B,无需进行更多的概括,即Object。

如何致电getName()取决于getName()的定义位置。 如果它在A中,您可以在ArrayList中的所有对象中调用它,但如果该方法仅在B中,则可能需要检查instanceof B和然后调用方法。