This article describes the process I went through to understand Java's interface. I talk about multiple inheritance and the diamond problem, polymorphism and dynamic binding, separation of interface and implementation as the spirit of Java, and my ultimate epiphany on how we should think about and use interfaces when we design.
Read this Artima.com article:
http://www.artima.com/designtechniques/interfaces.html