The term polymorphism comes from the Greek words meaning "many shapes". In programming it refers to the difference in behavior depending on the actual type of an object. For example:
Measurable x;
x = new BankAccount(1000);
x = new Coin(0.1,"dime");

Measurable is an interface, and BankAccount and Coin are classes which realize the interface. The object reference x can refer to an object of either BankAccount or Coin type. Measurable is not a class, it does not have a constructor, and no object of type Measurable can be constructed:
x = new Measurable(); //ERROR
Methods declared in the interface can be called with x, even if we do not know its actual type:
double d = x.getMeasure();
The actual method getMeasurable() that gets executed is resolved by the virtual machine depending on the class type of x. If x points to an object of class Coin, then the getMeasure() method of class Coin is called. Alternatively, if x refers to a BankAccount object, then the implementation of getMeasurable() in the BankAccount class is used. Therefore, the same method call can execute two different method implementations depending on the momentary contents of x. This behavior is called polymorphism, which is different than method overloading.

Difference between Polymorphism and Method Overloading
Interfaces and Polymorphism