Java9 - How to declare Private Static methods in the interface
In this blog post, Learn about Java 9’s interface private methods and static methods with examples. Java has seen many versions, and this post focuses on the evolution of interfaces from public modifiers to private modifiers and from abstract methods only to non-abstract methods.
Java 7 Interface Declaration Version Examples
Before Java 7, interfaces contained only constants
and abstract
methods.
Examples include
-constants
i.e. public static final variables.
- Public abstract methods with no implementation( public abstract method();0)
public interface MyInterface {
public String message = "Hello";
public void getMessage();
}
In the above interface example, we have defined one constant
and one abstract
method. These methods lack implementation, only having declarations, thus termed abstract. To include non-abstract methods, one could opt for an abstract class with abstract methods.
Java 8 Interface Default and Static Methods with an Example
Java 8 introduced several features to interfaces.
It allowed the declaration of public default methods
and public static methods
within interfaces.
Thus, interfaces could contain the following things.
- public static final variables
- public abstract methods
- public Default methods
- public static methods
Here is an example
public interface MyInterface {
public String CONSTANT = "constant";
public void abstractMethod();
// default method example
public default void defaultMethod() {
System.out.println("defaultMethod");
}
// static method example
public static void staticMethod() {
System.out.println("staticMethod");
}
}
public class TestInterface implements MyInterface{
public static void main(String[] args) {
TestInterface t=new TestInterface();
t.abstractMethod();
t.defaultMethod();
MyInterface.staticMethod();
}
@Override
public void abstractMethod() {
System.out.println("abstractMethod");
}
}
Output:
abstractMethod
defaultMethod
staticMethod
Default methods
can be overridden and called using an instance of the implementation class, while static
methods cannot be overridden and are called using the interface name.
Java 9 Interface Private and Static Methods Example
Java 9 introduced the ability to add private methods
and private static methods
to interfaces.
For instance, you may have written common code within default
methods in the interface.
The implementation class often contains redundant code, which is not considered a good design.
To address this, we can move redundant code to private
methods to promote reusability.
However, it’s important to note that private
methods enable code reuse within an interface.
Implementation classes will have access to these private
methods and the below features.
- public static final variables
- public abstract methods
- public Default methods
- public static methods
- private methods
- private static methods
Here is a java9 private static interface method example
public interface MyInterface {
public String CONSTANT = "constant";
public void abstractMethod();
// default method example
public default void defaultMethod() {
privateMethod();
privateStaticMethod();
System.out.println("defaultMethod");
}
// static method example
public static void staticMethod() {
System.out.println("staticMethod");
}
// private method example
private void privateMethod() {
System.out.println("privateMethod");
}
// private static method example
private static void privateStaticMethod() {
System.out.println("privateStaticMethod");
}
}
public class TestInterface implements MyInterface{
public static void main(String[] args) {
TestInterface t=new TestInterface();
t.abstractMethod();
t.defaultMethod();
MyInterface.staticMethod();
}
@Override
public void abstractMethod() {
System.out.println("abstractMethod");
}
}
The output of the above code execution is
abstractMethod
privateMethod
privateStaticMethod
defaultMethod
staticMethod
The error Modifier 'private' not allowed here
will be thrown in versions 8 or earlier.
Private and Static Methods Interface Features
- These methods are denoted as private with the
private
keyword. - Private methods include bodies enclosed in curly braces.
- The abstract keyword does not apply to these methods, as both functionalities are reversed.
- Private methods are accessible only within the interface where they are declared.
- Private static methods can access other static and non-static methods, i.e., default methods
- Private methods cannot be used in private static methods.
Ensure proper usage of these methods in interfaces to avoid a Exception in thread “main” java.lang.StackOverflowError’.
Conclusion
In this tutorial, we’ve learned about private methods and static methods in Java 7, Java 8, and Java 9 versions, along with examples.