在ArrayList中存储不同类的对象

时间:2015-06-07 04:12:24

标签: java class object arraylist hashmap

我有一个抽象的动物类和其他子类,如爬行动物,它们是进一步遗传的 我创建了数组以初始化动物,如下所示:

public void initializeArray()
{
    zooAnimal = new Animal[10];         // We will make 10 animals:

    // Polymorphism allows us to assign an object of a subclass to an 
    // object reference to a superclass/ancestor.
    zooAnimal[0] = new Kookaburra("Kelly",5);       // A 5kg kookaburra
    zooAnimal[1] = new Lizard("Lizzy",2,3);         // A 2kg, 3-year-old lizard
    zooAnimal[2] = new Crocodile("Colin", 200, 7);      // a 7-yo 200kg croc.
    zooAnimal[3] = new Rosella("Katie", 2, "Crimson");      // a 2-yo    Crimson Rosella
    zooAnimal[4] = new Rosella("Rosie", 4, "Green");        // a 4-yo Green Rosella
    zooAnimal[5] = new Snake("Boris","Brown",15,3); // A Brown Snake, 15kg, 3 years
    zooAnimal[7] = new Snake("Rita","Rattle",22,1); // A Rattle Snake, 22kg, 1 years
    zooAnimal[6] = new Dolphin("Dolly", 142, 6);    // A heavy, 6-yo dolphin.
    zooAnimal[8] = new Kookaburra("Kenneth",4);     // A 4kg kookaburra
    zooAnimal[9] = new Rosella("Yippy", 1, "Yellow");       // a 1-yo Yellow Rosella
}

但我想使用ArrayList 而不是数组来实现相同的 如何做到这一点?

我的Animal类和子类看起来像这样:

动物类

public abstract class Animal
{
    private int weight;
    private int age;
    private String name;

    protected Animal(String name, int weight, int age)
    {
        this.name = name;
        this.weight = weight;
        this.age = age;
    }

    public final int getWeight() { return weight; }

    public final int getAge() { return age; }

    public final String getName() { return name; }

    public abstract void makeNoise();       // Must be implemented by a subclass

    /** Provides a default description of the animal.
    * Sub-classes should override. */
    public String toString()
    {
        return "Animal Object: [name=" + name + ", age=" + age + ", weight=" + weight + "]";
    }
}

我有一个Bird类(Animal类的子类),一个Kookabura类(Animal的子类),Reptile class(Animal类的子类)和Lizard子类(Reptile类的子类)等等!!

3 个答案:

答案 0 :(得分:3)

您只需声明一个ArrayList<Animal>,并使用add(Animal)方法而不是赋值(polimorphism允许您这样做):

private ArrayList<Animal> zooAnimals;

public void initializeArray() {
    // this 10 is optional, but it's good to specify it 
    // when you know the final length of your list in advance
    zooAnimals = new ArrayList<>(10);

    zooAnimals.add(new Kookaburra("Kelly", 5)); // A 5kg kookaburra
    zooAnimals.add(new Lizard("Lizzy", 2, 3)); // A 2kg, 3-year-old lizard
    zooAnimals.add(new Crocodile("Colin", 200, 7)); // a 7-yo 200kg croc.
    zooAnimals.add(new Rosella("Katie", 2, "Crimson")); // a 2-yo    Crimson Rosella
    zooAnimals.add(new Rosella("Rosie", 4, "Green")); // a 4-yo Green Rosella
    zooAnimals.add(new Snake("Boris", "Brown", 15, 3)); // A Brown Snake, 15kg, 3 years
    zooAnimals.add(new Snake("Rita", "Rattle", 22, 1)); // A Rattle Snake, 22kg, 1 years
    zooAnimals.add(new Dolphin("Dolly", 142, 6)); // A heavy, 6-yo dolphin.
    zooAnimals.add(new Kookaburra("Kenneth", 4)); // A 4kg kookaburra
    zooAnimals.add(new Rosella("Yippy", 1, "Yellow")); // a 1-yo Yellow Rosella
}

答案 1 :(得分:2)

你可以这样做:

public void initializeList() {
        List<Animal> animals = new ArrayList<Animal>();
        animals.add(new Kookaburra("Kelly",5));
        animals.add(new Lizard("Lizzy",2,3));
        animals.add(new Crocodile("Colin", 200, 7));
        animals.add(new Rosella("Katie", 2, "Crimson"));
        animals.add(new Rosella("Rosie", 4, "Green"));
        animals.add(new Snake("Boris","Brown",15,3));
        animals.add(new Snake("Rita","Rattle",22,1));
        animals.add(new Dolphin("Dolly", 142, 6));
        animals.add(new Kookaburra("Kenneth",4));
        animals.add(new Rosella("Yippy", 1, "Yellow"));
    }

答案 2 :(得分:0)

java API提供了用于存储和操作对象组的特殊类。一个这样的类是Arraylist

请注意,Arraylist类位于java.util.ArrayList

像创建任何对象一样创建一个ArrayList。

import java.util.ArrayList;
//..
ArrayList ajay = new ArrayList();

下面

  • ArrayList - &gt;类

  • ajay - &gt;对象

您可以选择指定ArrayList将保留的对象的容量和类型:

  ArrayList ajay<String> = new ArrayList<String>(10);

ArrayList提供了各种操作对象的方法。 add()方法将对象添加到列表中, remove()方法从列表中删除对象。

示例代码:

import java.util.ArrayList;

public class MyClass {
    public static void main(String[ ] args) {
        ArrayList<String> ajay = new ArrayList<String>();
        ajay.add("Red");
        ajay.add("Blue");
        ajay.add("Green");
        ajay.add("Orange");
        ajay.remove("Green");

        System.out.println(colors);
}
}

我建议你解决你的守则,

public void initializeList() {
        List<Animal> animals = new ArrayList<Animal>();
        animals.add(new Kookaburra("Kelly",5));
        animals.add(new Lizard("Lizzy",2,3));
        animals.add(new Crocodile("Colin", 200, 7));
        animals.add(new Rosella("Katie", 2, "Crimson"));
        animals.add(new Rosella("Rosie", 4, "Green"));
        animals.add(new Snake("Boris","Brown",15,3));
        animals.add(new Snake("Rita","Rattle",22,1));
        animals.add(new Dolphin("Dolly", 142, 6));
        animals.add(new Kookaburra("Kenneth",4));
       animals.add(new Rosella("Hippy",1,"Yellow");
}

在您的代码中,动物是一个类,动物是一个类的对象..