Before Java , adding a new method to an interface broke every class that implemented it. If you had classes implementing Drawable, you had to edit all . Default methods solve this problem.
A default method has a body right inside the interface. Classes inherit it automatically, but they can override it if they need different behavior.
interface Drawable {
void draw();
default void describe() {
System.out.println("A drawable shape");
}
}
Now every Drawable class gets describe() for free. If interfaces both provide a default method with the same signature, the implementing class must override it to resolve the conflict.