我想在 linkedlist 中存储从单个类继承的两个不同类的对象。
代码示例
class Animal {
.....
.....
.....
}
class Dog extends Animal {
.....
.....
.....
}
class Snake extends Animal {
.....
.....
.....
}
现在我想做的是这样的事情:
Linkedlist <Animal> animalslist = new Linkedlist <>();
animalslist.push (new Dog);
animalslist.push (new Snake);
当我为我的 Android 应用程序编写代码时,它会成功构建,但是当我运行应用程序时,它会崩溃。
答案 0 :(得分:0)
仅为了说明@Steamwork: 下面的代码工作得很好,即使ClassB和ClassA根本没有相关......
public class TestItMain {
public static void main(String[] args) {
LinkedList<Object> list = new LinkedList<Object>();
list.add(new ClassA());
list.add(new ClassB());
System.out.println(((ClassA)list.get(0)).val1);
System.out.println(((ClassB)list.get(1)).val2);
}
public static class ClassA
{
public int val1=1;
}
public static class ClassB
{
public int val2=2;
}
}
@geekFromPeshawar - 此示例确认您的问题与List(或LinkedList)无关。问题出在其他地方......
这可能是一个问题,因为您使用push
方法。它实际上将所有对象都移动了。每次推送后,每个位置的对象类可能会发生变化。与push
合作必须非常小心。
恕我直言,对于这种情况,当添加的对象留在原地时使用add
方法要好得多......
答案 1 :(得分:-1)
正如您所说,您面临的问题是,您正试图将不同的类添加到同一列表中。
通常,在Java中,当您创建能够存储某些类的List
时,例如List<Animal>
,这并不意味着Dogs或Snakes列表会将上述列表作为其父级:
// These two lists do not share a relation: one is not inherent of the other
List<Animal> animalList = new LinkedList<>();
List<Dog> dogList = new LinkedList<>();
然而,有希望:
如果您要创建另一个使用Animal
子类的类,并在List
中使用它,那么您将能够访问每个List
的每个类的实例。元素:
class myClass {
Dog dog;
Snake snake;
}
// You can then add the class
List<myClass> myList = new LinkedList<>();
此外,您可以事先为每个Dog
或Snake
设置特定数据。其中,添加到myClass
的每个myList
对象都将包含以后可以访问的所有必要数据。
希望这会有所帮助:)