How has default methods in interfaces changed in recent Java versions?

In recent Java versions, particularly from Java 8 onwards, default methods were introduced to interfaces. This feature allows developers to add new methods to interfaces without breaking the existing implementations. Default methods provide a way to extend interfaces while maintaining backward compatibility, making it easier to enhance APIs.

Prior to Java 8, any change to an interface would require all implementing classes to provide an implementation for the new methods. However, with the introduction of default methods, an interface can now offer a default behavior that implementing classes can either use or override.

// Example of a default method in an interface interface Animal { // A default method default void makeSound() { System.out.println("Some sound"); } } class Dog implements Animal { // Overrides the default method @Override public void makeSound() { System.out.println("Bark"); } } public class Main { public static void main(String[] args) { Dog dog = new Dog(); dog.makeSound(); // Outputs: Bark } }

Java default methods interfaces Java 8 backward compatibility APIs method implementation