Private Methods in Java 9 Interfaces

26 Apr, 2018
Java 9 onwards, you can include private methods in interfaces. Before Java 9 it was not possible.
Interfaces till Java 7
In Java SE 7 or earlier versions, an interface can have only two things i.e. Constant variables and Abstract methods. These interface methods MUST be implemented by classes which choose to implement the interface.
// Java 7 program to illustrate// private methods in interfacespublic interface TempI {    public abstract void method(int n);}  class Temp implements TempI {    @Override    public void method(int n)    {        if (n % 2 == 0)            System.out.println("geeksforgeeks");        else            System.out.println("GEEKSFORGEEKS");    }      public static void main(String[] args)    {        TempI in1 = new Temp();        TempI in2 = new Temp();        in1.method(4);        in2.method(3);    }}
OUTPUT : geeksforgeeks
         GEEKSFORGEEKS

Java 8 Interface Changes
Some new features to interface were introduced in Java 8 i.e. Default methods and Static methods feature. In Java 8, an interface can have only four types:
Constant variablesAbstract methodsDefault methodsStatic methods
Constant variables
Abstract methods
Default methods
Static methods
Example
// Java 8 program to illustrate// static, default and abstract methods in interfacespublic interface TempI {      public abstract void div(int a, int b);  public default void    add(int a, int b)    {        System.out.print("Answer by Default method = ");        System.out.println(a + b);    }      public static void mul(int a, int b)    {        System.out.print("Answer by Static method = ");        System.out.println(a * b);    }}  class Temp implements TempI {      @Override    public void div(int a, int b)    {        System.out.print("Answer by Abstract method = ");        System.out.println(a / b);    }      public static void main(String[] args)    {        TempI in = new Temp();        in.div(8, 2);        in.add(3, 1);        TempI.mul(4, 1);    }}
OUTPUT : Answer by Abstract method = 4
         Answer by Default method = 4
         Answer by Static method = 4

Java 9 Interface Changes
Java 9 introduced private methods and private static method in interfaces. In Java 9 and later versions, an interface can have six different things:
Constant variablesAbstract methodsDefault methodsStatic methodsPrivate methodsPrivate Static methodsThese private methods will improve code re-usability inside interfaces and will provide choice to expose only our intended methods implementations to users.These methods are only accessible within that interface only and cannot be accessed or inherited from an interface to another interface or class.// Java 9 program to illustrate// private methods in interfacespublic interface TempI {      public abstract void mul(int a, int b);  public default void    add(int a, int b)    {// private method inside default method        sub(a, b);    // static method inside other non-static method        div(a, b);        System.out.print("Answer by Default method = ");        System.out.println(a + b);    }      public static void mod(int a, int b)    {        div(a, b); // static method inside other static method        System.out.print("Answer by Static method = ");        System.out.println(a % b);    }      private void sub(int a, int b)    {        System.out.print("Answer by Private method = ");        System.out.println(a - b);    }      private static void div(int a, int b)    {        System.out.print("Answer by Private static method = ");        System.out.println(a / b);    }}  class Temp implements TempI {      @Override    public void mul(int a, int b)    {        System.out.print("Answer by Abstract method = ");        System.out.println(a * b);    }      public static void main(String[] args)    {        TempI in = new Temp();        in.mul(2, 3);        in.add(6, 2);        TempI.mod(5, 3);    }}OUTPUT : Answer by Abstract method = 6              // mul(2, 3) = 2*3 = 6
         Answer by Private method = 4               // sub(6, 2) = 6-2 = 4 
         Answer by Private static method = 3        // div(6, 2) = 6/2 = 3
         Answer by Default method = 8               // add(6, 2) = 6+2 = 8
         Answer by Private static method = 1        // div(5, 3) = 5/3 = 1 
         Answer by Static method = 2                // mod(5, 3) = 5%3 = 2
 Rules For using Private Methods in InterfacesPrivate interface method cannot be abstract and no private and abstract modifiers together.Private method can be used only inside interface and other static and non-static interface methods.Private non-static methods cannot be used inside private static methods.We should use private modifier to define these methods and no lesser accessibility than private modifier. So, from above it can be conlcuded that java 9 private interface methods can be static or instance. In both cases, the private method is not inherited by sub-interfaces or implementations. They are mainly there to improve code re-usability within interface only – thus improving encapsulation.My Personal Notes
arrow_drop_upSave
Constant variables
Abstract methods
Default methods
Static methods
Private methods
Private Static methods
These private methods will improve code re-usability inside interfaces and will provide choice to expose only our intended methods implementations to users.These methods are only accessible within that interface only and cannot be accessed or inherited from an interface to another interface or class.
// Java 9 program to illustrate// private methods in interfacespublic interface TempI {      public abstract void mul(int a, int b);  public default void    add(int a, int b)    {// private method inside default method        sub(a, b);    // static method inside other non-static method        div(a, b);        System.out.print("Answer by Default method = ");        System.out.println(a + b);    }      public static void mod(int a, int b)    {        div(a, b); // static method inside other static method        System.out.print("Answer by Static method = ");        System.out.println(a % b);    }      private void sub(int a, int b)    {        System.out.print("Answer by Private method = ");        System.out.println(a - b);    }      private static void div(int a, int b)    {        System.out.print("Answer by Private static method = ");        System.out.println(a / b);    }}  class Temp implements TempI {      @Override    public void mul(int a, int b)    {        System.out.print("Answer by Abstract method = ");        System.out.println(a * b);    }      public static void main(String[] args)    {        TempI in = new Temp();        in.mul(2, 3);        in.add(6, 2);        TempI.mod(5, 3);    }}
OUTPUT : Answer by Abstract method = 6              // mul(2, 3) = 2*3 = 6
         Answer by Private method = 4               // sub(6, 2) = 6-2 = 4 
         Answer by Private static method = 3        // div(6, 2) = 6/2 = 3
         Answer by Default method = 8               // add(6, 2) = 6+2 = 8
         Answer by Private static method = 1        // div(5, 3) = 5/3 = 1 
         Answer by Static method = 2                // mod(5, 3) = 5%3 = 2

 Rules For using Private Methods in Interfaces
Private interface method cannot be abstract and no private and abstract modifiers together.
Private method can be used only inside interface and other static and non-static interface methods.
Private non-static methods cannot be used inside private static methods.
We should use private modifier to define these methods and no lesser accessibility than private modifier.
 So, from above it can be conlcuded that java 9 private interface methods can be static or instance. In both cases, the private method is not inherited by sub-interfaces or implementations. They are mainly there to improve code re-usability within interface only – thus improving encapsulation.
java-interfaces
Java
Technical Scripter
Java
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Stream In Java
Introduction to Java
Constructors in Java
Exceptions in Java
Generics in Java
Functional Interfaces in Java
Strings in Java
Java Programming Examples
HashSet in Java
Abstraction in Java