In this installment of my Design Techniques
column, I describe my process to understanding 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.