我已经创建了一个链接列表,但我似乎无法理解如何将不同的对象插入到同一个列表中。假设我有一个列表,我想包含猫和狗两种类型的对象,这可能吗?我知道如何只插入猫,或者只插入狗,但我似乎不知道如何将两者插入到同一个列表中。
发布于 2015-02-05 14:51:19
您希望使用它们的“最低”公共类或公共接口,以便尽可能多地了解列表元素(以及您需要的内容)。
如果两个类Dog和Cat 都扩展了类 Animal,并且希望表示动物列表,则可以这样做:
List<Animal> animals = new YourList<Animal>();
for (Animal animal: animals){
// use some Animal method
animal.eat();
}如果两个都实现了接口 TailOwner,并且希望在列表成员上使用来自该接口的操作,则可以这样做:
List<TailOwner> tailOwners = new YourList<TailOwner>();
for (TailOwner tailOwner: tailOwners){
// use some TailOwner method
tailOwner.wiggle();
}如果您不确定,您可以始终回到Object,因为所有的Java类都对它进行了扩展:
List<Object> objects = new YourList<Object>();
for (Object object: objects){
// use some Object method
System.out.println(tailOwner.toString());
}通常,当您在同一个列表中有两个对象时,它们确实有--。
无论哪种方法,当您将Cat-specific或Dog-specific方法放到列表中时(在将它们转换回任何方法之前),您都会放弃它们。
当您使用列表中的对象时,良好的层次结构可以防止转换,并促进多态性。有关在编译时从列表中检索到的对象,您可以知道的是它们至少符合列表的泛型类型。
发布于 2015-02-05 14:48:29
如果Cat和Dog没有任何共同之处,则可以使用Object参数化LinkedList
List<Object> list = new LinkedList<Object>();这样,您就可以同时添加Cat和Dog,但请注意,这可能会迫使您每次从列表中检索对象时都要检查类型。
发布于 2015-02-05 14:56:36
您只能添加implements相同接口或extends相同类的元素。
class Animal {}
class Cat extends Animal{}
class Dog extends Animal{}
List<Animal> animals = new LinkedList<Animal>;
animals.add(new Cat());
animals.add(new Dog());或
interface Animal {}
class Cat implements Animal{}
class Dog implements Animal{}
List<Animal> animals = new LinkedList<Animal>;
animals.add(new Cat());
animals.add(new Dog());https://stackoverflow.com/questions/28346905
复制相似问题