如果我有一个父对象的链接列表,如:
LinkedList<ParentClass> list = new LinkedList<ParentClass>();
我想用不同类型的子对象(所有扩展为“ParentClass”)来填充它们,我将如何进行此操作 . 另请注意,我不知道将使用哪个特定的子类 . 例如,我可以尝试:
list.add(someInstanceOfAChildClass);
然后能够访问该子类中的方法和属性 . 如果我没有明白我的意思,我可以澄清一下 . 提前致谢!
3 回答
使用不同的
Child
对象填充List<Parent>
没有问题,但是您无法直接访问Child
的方法和属性 . 如果您尝试将List
成员分配给类型为Child
的引用,则会出现类型不匹配错误 .要解决此问题,您可以显式键入强制转换
List
返回的对象 .但是,要安全地执行此操作,首先应使用
instanceof
运算符 .您只需添加子类元素 . 当它们扩展ParentClass时,它们可以添加到任何包含ParentClass类型的集合中 .
你在谈论多态性 . 如果你有 :
您只需要将
A
和B
的实例添加到列表中,例如然后,如果你想对列表的所有元素做一些事情,例如
方法
doSomething()
需要使用实现定义,或在ParentClass
中声明abstract
,并且可以在A
和B
中重写以反映每个类中的特定行为 . 如果您需要访问某些属性,则需要public
并在ParentClass
中声明 . 注意:这是一个好习惯 not to 将属性设置为public
,除非它们是一些常量(final
) . 标准方法是提供一个吸气剂 .