Besides having the possibility of adding methods to the interface in future versions, there is the important point of allowing an interface
to stay a functional interface even if it has more than one method.
A functional interface has only one non-default abstract method which can be implemented via a lambda expression. One example is the Predicate
interface which has only one abstract method (test
) while providing default methods for negating a Predicate
or combining it with another Predicate
. Without default methods these methods had to be provided in another utility class like the pre-Java 8 Collections
class (as you don’t want to give up the possibility of lambda implementations for such an interface
).