What is the purpose of the default keyword in Java?
default, interface, java, java-8
Solution
It's a new feature in Java 8 which allows an `interface` to provide an implementation. Described in Java 8 JLS-13.5.6. Interface Method Declarations which reads (in part)
Adding a `default` method, or changing a method from `abstract` to `default`, does not break compatibility with pre-existing binaries, but may cause an `IncompatibleClassChangeError` if a pre-existing binary attempts to invoke the method. This error occurs if the qualifying type, `T`, is a subtype of two interfaces, `I` and `J`, where both `I` and `J` declare a `default` method with the same signature and result, and neither `I` nor `J` is a subinterface of the other.
What's New in JDK 8 says (in part)
Default methods enable new functionality to be added to the interfaces of libraries and ensure binary compatibility with code written for older versions of those interfaces.
Problem
An interface in Java is similar to a class, but the body of an interface can include only abstract methods and `final` fields (constants). Recently, I saw a question, which looks like this ``` interface AnInterface { public default void myMethod() { System.out.println("D"); } } ``` According to the interface definition, only abstract methods are allowed. Why does it allow me to compile the above code? What is the `default` keyword? On the other hand, when I was trying to write below code, then it says `modifier default not allowed here` ``` default class MyClass{ } ``` instead of ``` class MyClass { } ``` Can anyone tell me the purpose of the `default` keyword? Is it only allowed inside an interface? How does it differ from `default` (no access modifier)?