Worked example
Shape[] shapes = { new Circle(1), new Rect(2, 3) };
for (int i = 0; i < shapes.length; i++) {
System.out.println(shapes[i].describe());
}
// Circle has area 3.14
// Rect has area 6.0
The array is typed Shape, but each element behaves as its real class.