Source of InterfaceJava8.java


  1: //InterfaceJava8.java

  3: public interface InterfaceJava8
  4: {
  5:     int INTEGER_CONSTANT = 10;

  7:     //Prior to Java 8 (note the [redundant] "abstract" keyword)
  8:     public abstract void legacyMethod();
  9:     //A method like this must be implemented in
 10:     //any class that implements this interface.

 12:     //Only in Java 8 (note "static" keyword)
 13:     public static void staticMethod()
 14:     {
 15:         System.out.println("Printing from static method");
 16:     }

 18:     //Only in Java 8 (note "default" keyword)
 19:     public default void defaultMethod()
 20:     {
 21:         System.out.println("Printing from default method");
 22:     }
 23: }
 24: /*
 25:     The new static and default methods work together with the usual
 26:     (legacy) abstract methods in an interface to deliver the full
 27:     functionality of an interface.

 29:     Advice for placing a static method implementation in an interface:
 30:     If you need a static utility method for the implementors of an
 31:     interface, add that static utility method to the interface itself
 32:     as a static method.

 34:     Advice for placing a default method implementation in an interface:
 35:     If a feature is added to an existing hierarchy of classes and that
 36:     feature is not needed for all the classes in the hierarchy, place
 37:     that "feature" in a default method. If the method were made abstract,
 38:     it would have to be implemented by all the classes in the hierarchy.
 39:     This would break all code that implemented the interface. Making the
 40:     method a default one allows any interface implementation which wants
 41:     to use it to do so, while other implementations can just ignore it,
 42:     or override it if it doesn't do quite what we want it to do. This
 43:     makes the functionality implemented via the default method an optional
 44:     feature rather than a mandatory one.
 45: */