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