java - 在ArrayList中存储不同类的对象

标签 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 类的子类),a Kookabura类( Animal 的子类), Reptile类(Animal 类的子类)和 Lizard子类(Reptile类的子类)等等!!

最佳答案

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

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
}

关于java - 在ArrayList中存储不同类的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30689975/

相关文章:

ios - Swift 中一个类的多个实例

objective-c - 附加 CString 是否比附加 ObjC 字符串更好?

javascript - 如果找到具有正确属性的obj,则js返回true

javascript - 可接受/好的执行 Javascript "classes"(OOP) 的方法?

java - 通过 ActionListener 更新 JMenuItem

java - Quarkus - 没有错误,但没有电子邮件(使用 gmail)

java - 重构谷歌的 NetworkBoundResource 类以使用 RxJava 而不是 LiveData

C++:使用后类中的枚举定义

php - PHP 类属性可以等于另一个类属性吗?

java - 动态 Bootstrap 弹出内容