Polymorphism is just a fancy word which means you can use a more general term to refer to a specific type of object.
It goes hand in hand with interfaces
Interface: Same word, several flavours
Instead of saying "I got a new Vauxhall Corsa", you could simply say "I got a new car". This statement would also be true if you'd just got a Ford Fiesta, as that is also a car. The flexibility (polymorphism) of the English word 'car' means that you don't have to specify exactly which kind of car it is. Your audience will know that you have a modern contraption on your front drive which is designed to beep, steer, and drive down the road, even though the exact mechanisms of Vauxhall and Ford engines may be different from each other.
Polymorphism takes this interface and lets you refer to your Ford Fiesta as simply a Car:
Car car = new Ford();
From this blog:
Polymorphism means using a superclass variable to refer to a subclass
object. For example, consider this simple inheritance hierarchy and
code:
abstract class Animal {
abstract void talk();
}
class Dog extends Animal {
void talk() {
System.out.println("Woof!");
}
}
class Cat extends Animal {
void talk() {
System.out.println("Meow.");
}
}
Polymorphism allows you to hold a reference to a Dog object in a
variable of type Animal, as in:
Animal animal = new Dog();
PS Given the other answers, you may also want to know the difference between an abstract class and an interface.