Polymorphism is acheived in
Java through over-riding methods in a sub-class (NOT overloading methods by having different signatures).
Class Pet has method play().
Class Dog sub-classes Pet and over-rides method play() to be dog specific play.
Class Cat sub-classes Pet and over-rides method play() to be cat specific play.
Objects which are Pets can now come in "many forms" (ie. polymorphism). This allows us to use a Pet object, call it's play method, and know that the object will behave properly for it's sub-type. If the Pet is a Cat it will play the way a cat plays - without us having to know in advance that it is a cat and having to call a "catPlay" method.
Now we can do things like load up an array of Pets with Cats and Dogs, and loop through the array calling the play() method on all of the array members without knowing whether it is a cat or a dog. For this to work the methods in Cat and Dog must have the same name - and the fact that the Super class has that method with the same name tells us that the cats and dogs will be able to use a method with that name - either by overriding the method or inheriting the method.