Implementation, which includes instance variables and method implementations, is always singly inherited. As a result, confusion will never arise in Java over which inherited instance variable or method implementation to use. In my quest to understand the interface, the diamond problem explanation made some sense to me, but it didn't really satisfy me. The interface lets you take greater advantage of polymorphism in your designs, which in turn helps you make your software more flexible. This section will present a quick refresher on the meaning of polymorphism.
Polymorphism means using a superclass variable to refer to a subclass object.
An Animal , for example, can look like a Dog or a Cat or any other subclass of Animal . It only knows that the object will be some subclass of Animal . As mentioned above, dynamic binding means the JVM will decide at runtime which method to invoke based on the class of the object. Getting more polymorphism 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. With single inheritance only, you'd either have to somehow fit CuckooClock into the Animal family, or not use polymorphism.