If a class implements two interfaces having same default methods, then the compiler forces a programmer to provide the implementation explicitly, otherwise it raises a compilation exception.
interface Movable { void stepAhead(); void turnLeft(); void turnRight(); default void turnAround() { turnLeft(); turnLeft(); }}interface Jumpable { void jump(); void turnLeftJump(); void turnRightJump(); default void turnAround() { turnLeftJump(); turnLeftJump(); }}class Batman implements Movable, Jumpable { // define an implementation for abstract methods public void stepAhead() {...} public void turnLeft() {...} public void turnRight() {...} public void jump() {...} public void turnLeftJump() {...} public void turnRightJump() {...} // If you don't implement it then compilation error // define an implementation for conflicting default method public void turnAround() { // define turnaround for Spiderman Movable.super.turnAround(); // choose one of the default implementation }}