Storing objects of different classes inside an ArrayList

3.3k Views Asked by At

I have a abstract animal class and other subclass like reptiles which is further inherited.
I have created array to initialize the animal as shown below:

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
}

But I want to achieve the same using an ArrayList instead of array.
How this can be done?

My Animal class and sub-classes look like this:

Animal class

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 + "]";
    }
}

And I have a Bird class (sub-class of Animal class), a Kookabura class (sub-class of Animal), Reptile class (sub-class of Animal class) and a Lizard subclass (sub-class of Reptile class) and so on!!

3

There are 3 best solutions below

0
On

You can do like this:

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
On

You just need to declare an ArrayList<Animal>, and use the add(Animal) method instead of assignments (polimorphism allows you to do so):

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
}
0
On

The java API provides special class to store and manipulate group of objects. One Such Class is Arraylist

Note that Arraylist class is in java.util.ArrayList

Create an ArrayList as you would any objects.

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

Here

  • ArrayList -> Class

  • ajay -> object

You can optionally specify the capacity and type of object the ArrayList will hold on:

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

The ArrayList provides various methods for manipulating objects.The add() method adds object to list and The remove() method removes object from the list.

Sample code:

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);
}
}

I recommend you for the Solution of your Code has been,

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");
}

In your Code,Animal is a class and animals is an object of a class..