Java 8 introduced default methods in interfaces. Released on March 18, 2014, Java SE 8 allowed an interface to provide a method body using the default keyword.
Before Java 8, adding a new abstract method to a widely used interface could break existing implementations because every implementing class would need to define that method. Default methods addressed this compatibility problem: an interface could gain a method with a built-in implementation, while existing classes could continue compiling and inherit that behavior.
This feature was especially important for evolving the Java Collections API. It also arrived alongside lambda expressions and functional interfaces, making it possible to add useful behavior to interfaces used in functional-style programming. For example, many methods on Iterable and collection-related interfaces rely on Java 8 language features.
Java 9 later added private methods inside interfaces, which can support code reuse among default methods. That later addition does not change the original milestone: default methods themselves were introduced in Java 8. Static interface methods also arrived in Java 8, but they are called on the interface rather than inherited as instance behavior.