Found this linkthis link to be really useful too:
. Couple of excerpts from the link that made sense to me:
...Separation of interface and implementation is one of the primary ideas behind Java in general. The Java virtual machine (JVM), for example, is an abstract computer that defines the way your program "interfaces" with the underlying real computer. A JVM that runs on Windows is one implementation of that abstract computer. A JVM that runs on the Macintosh is another. A JVM that runs on your wristwatch is yet another
Interfaces give you more polymorphism than singly inherited families of classes, because with interfaces you don't have to make everything fit into one family of classes.
By using interfaces, you decouple the parts of your system from each other and generate code that is more flexible: more easily changed, extended, and customized.
More details can be found here.