Java 8 introduced default methods in interfaces. This post describes what they are, and how they can change the design of APIs.   A nominal design   Earlier, in Java, interfaces could only have contracts - method signatures with no implementation.   In order to add some implementation, a class was required, whether abstract or not.   Hence, traditional API design then followed this hierarchy:       The root interface defines the contractAn intermediate class implements common behavior i.e. BarIf