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

时间:2017-06-17 13:40:23

标签: java android inheritance linked-list

我想在 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 应用程序编写代码时,它会成功构建,但是当我运行应用程序时,它会崩溃。

2 个答案:

答案 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<>();

此外,您可以事先为每个DogSnake设置特定数据。其中,添加到myClass的每个myList对象都将包含以后可以访问的所有必要数据。

希望这会有所帮助:)