添加从单个类继承的不同类的对象

问题描述:

我想存储从链接列表中的单个类继承的两个不同类的对象。添加从单个类继承的不同类的对象

代码示例

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

什么是崩溃异常?也许这不是因为继承? – Vadim

+0

不知道异常,但问题在于将不同类的对象添加到同一个列表中。 谢谢 – geekFromPeshawar

+0

没有关于崩溃的细节没有可能说...也许你需要指定在List实例中的对象类型? 'new LinkedList ()'也许在构造函数中有什么问题......谁知道... – Vadim

您正面临的问题是,正如您正确地指出的那样,因为您试图将不同的类添加到同一个列表中。

通常情况下,在Java中,当你创建一个能够List存储一些类,如List<Animal>,这并不意味着狗或蛇的名单将有上述列表作为它们的父:

// 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<>(); 

此外,您可以预先设置每个DogSnake的具体数据。其中,每个myClass对象添加到myList将包含所有必要的数据,然后可以稍后访问。

希望这有助于:)

+0

任何其他方式来存储从动物中继承的狗和蛇的对象在一个单一的数据结构? – geekFromPeshawar

+0

@Steamwork - 您的陈述不正确。因为如果它是正确的,我有一个'List '我不能添加任何对象,因为它们的实际类不是Object。实际上,我可以添加任何类的任何对象,甚至不会从另一个类继承,因为它们都是Object的子类。 – Vadim

为了方便说明,以@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方法好得多,当添加的对象保持原位时...

+0

我也尝试过使用add()方法。但仍不能正常工作 – geekFromPeshawar

+0

不要尝试任何事情,先找出问题的真正原因。否则,你将永远找不到解决方案。 – Vadim