Worked example
Animal[] animals = { new Dog("Rex"), new Cat("Felix"), new Animal("Thing") };
for (int i = 0; i < animals.length; i++) {
System.out.println(animals[i].describe());
}
// Rex is a dog
// Felix is a cat
// Thing is an animal
The same describe() call gives a different answer for each object.