Interfaces and abstract classes and inheritance are several ways Java gives us to use
polymorphism, that is different objects that accept the same messages (method call) but do different things.
For example, if I write this:
you can call my method with any implementation of the List interface. You can use LinkedList, ArrayList or some new List that you make up. The compiler will make sure that whatever you pass implements List so I can safely call any method defined by List.
Interfaces are the "most abstract" of the tools we have, which often makes them a good choice when you want to write polymorphic behavior. There is an
FAQ entry about choosing between interface and abstract class.
Does that make sense?