繁体   English   中英

Java列表如何设置和获取父类型列表的子对象

[英]Java List how to set and get children objects of a list of type parent

如果我有一个父对象的链接列表,如:

LinkedList<ParentClass> list = new LinkedList<ParentClass>();

我想用不同类型的子对象(所有扩展为“ParentClass”)来填充它们,我将如何进行此操作。 另请注意,我不知道将使用哪个特定的子类。 例如,我可以尝试:

list.add(someInstanceOfAChildClass);

然后能够访问该子类中的方法和属性。 如果我没有明白我的意思,我可以澄清一下。 提前致谢!

使用不同的Child对象填充List<Parent>没有问题,但是您无法直接访问Child的方法和属性。 如果您尝试将List成员分配给Child类型的引用,则会出现Type Mismatch错误。

为了解决这个问题,您可以键入投用返回的对象List明确。

Child iThinkItsChild = (Child) listOfParents.get(indexOfChild);

但是,要安全地执行它,您应该首先使用instanceof运算符。

Parent parent = listOfParents.get(indexOfChild);
if (parent instanceof Child) {
    Child imSureItsChildNow = (Child) parent;
    imSureItsChildNow.childMethod();
}

您只需添加子类元素。 当它们扩展ParentClass时,它们可以添加到任何包含ParentClass类型的集合中。

你在谈论多态性。 如果你有 :

public class A extends ParentClass {...}
public class B extends ParentClass {...}

您只需要将AB实例添加到列表中,例如

list.add(new A()); // add a A
list.add(new A()); // add another A
list.add(new B()); // add a B

然后,如果你想在列表的所有元素上做一些事情,例如

for (ParentClass foo : list) {
   foo.doSomething();
}

方法doSomething()需要使用实现定义,或者在ParentClass声明为abstract ,并且可以在AB重写以反映每个类中的特定行为。 如果需要访问某些属性,则需要public并在ParentClass声明。 注意:这是一种很好的做法, 不要将属性设置为public除非它们是一些常量( final )。 标准方法是提供一个吸气剂。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM