我想将继承自单个类的两个不同类的对象存储在链接列表中。
代码示例
class Animal {
.....
.....
.....
}
class Dog extends Animal {
.....
.....
.....
}
class Snake extends Animal {
.....
.....
.....
}
现在我想做的是这样的:
Linkedlist <Animal> animalslist = new Linkedlist <>();
animalslist.push (new Dog);
animalslist.push (new Snake);
当我为我的 Android 应用程序编写这样的代码时,它成功构建,但当我运行应用程序时它崩溃了。
只是为了说明@Steamwork:下面的代码运行完美,甚至 B 类和 A 类也完全没有关系......
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 - 此示例确认您的问题与列表(或链接列表(无关。问题出在别的地方...这可能是一个问题,因为您使用push
方法。它实际上将所有对象向下移动。并且每个位置的对象类可能会在每次推送后发生变化。与push
一起工作必须非常小心。 恕我直言,在这种情况下,当添加的对象留在原位时add
最好使用这种方法......
正如您正确指出的那样,您面临的问题是因为您正在尝试将不同的类添加到同一列表中。
通常,在 Java 中,当您创建一个能够存储某些类(例如 List<Animal>
(的List
时,这并不意味着狗或蛇的列表会将上述列表作为其父级:
// 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
设置特定数据。其中,添加到myList
的每个myClass
对象都将包含所有必要的数据,然后可以在以后访问这些数据。
希望这对:)有所帮助