As you can see in this example, you can use the interface reference where you don't need to know implementation details, or where you rather not know them. The animals array may have objects of any concrete Animals. Which move() implementation executes in each iteration depends on the actual object referenced. Polymorphism lets you work through abstractions this way.
You may ask, why the hell do I need this?
I suggest to take a good look at design
patterns, where you will find excellent examples of how useful and powerful this technique is.