Java9 Private Interface Methods
[ Java 9 New Features](#)
Before Java 8, interfaces could have constant variables and abstract methods.
We cannot provide method implementation in interfaces. If we want to provide a combination of abstract methods and non-abstract methods (method with implementation), then we have to use abstract class.
## Example
public class Tester{public static void main(String[]args){LogOracle log = new LogOracle(); log.logInfo(""); log.logWarn(""); log.logError(""); log.logFatal(""); LogMySql log1 = new LogMySql(); log1.logInfo(""); log1.logWarn(""); log1.logError(""); log1.logFatal(""); }}final class LogOracle implements Logging{ @Override public void logInfo(String message){getConnection(); System.out.println("Log Message : " + "INFO"); closeConnection(); } @Override public void logWarn(String message){getConnection(); System.out.println("Log Message : " + "WARN"); closeConnection(); } @Override public void logError(String message){getConnection(); System.out.println("Log Message : " + "ERROR"); closeConnection(); } @Override public void logFatal(String message){getConnection(); System.out.println("Log Message : " + "FATAL"); closeConnection(); } @Override public void getConnection(){System.out.println("Open Database connection"); } @Override public void closeConnection(){System.out.println("Close Database connection"); }}final class LogMySql implements Logging{ @Override public void logInfo(String message){getConnection(); System.out.println("Log Message : " + "INFO"); closeConnection(); } @Override public void logWarn(String message){getConnection(); System.out.println("Log Message : " + "WARN"); closeConnection(); } @Override public void logError(String message){getConnection(); System.out.println("Log Message : " + "ERROR"); closeConnection(); } @Override public void logFatal(String message){getConnection(); System.out.println("Log Message : " + "FATAL"); closeConnection(); } @Override public void getConnection(){System.out.println("Open Database connection"); } @Override public void closeConnection(){System.out.println("Close Database connection"); }}interface Logging{String ORACLE = "Oracle_Database"; String MYSQL = "MySql_Database"; void logInfo(String message); void logWarn(String message); void logError(String message); void logFatal(String message); void getConnection(); void closeConnection(); }
The output of the above example is:
Open Database connection Log Message : INFO Close Database connection Open Database connection Log Message : WARN Close Database connection Open Database connection Log Message : ERROR Close Database connection Open Database connection Log Message : FATAL Close Database connection
In the above example, each logging method has its own implementation.
Java 8 interface introduced some new features β default methods and static methods. We can write method implementation in Java SE 8 interfaces, just need to use the default keyword to define them.
In Java 8, an interface can define the following types of variables/methods:
* **Constants**
* **Abstract methods**
* **Default methods**
* **Static methods**
## Example
public class Tester{public static void main(String[]args){LogOracle log = new LogOracle(); log.logInfo(""); log.logWarn(""); log.logError(""); log.logFatal(""); LogMySql log1 = new LogMySql(); log1.logInfo(""); log1.logWarn(""); log1.logError(""); log1.logFatal(""); }}final class LogOracle implements Logging{}final class LogMySql implements Logging{}interface Logging{String ORACLE = "Oracle_Database"; String MYSQL = "MySql_Database"; default void logInfo(String message){getConnection(); System.out.println("Log Message : " + "INFO"); closeConnection(); }default void logWarn(String message){getConnection(); System.out.println("Log Message : " + "WARN"); closeConnection(); }default void logError(String message){getConnection(); System.out.println("Log Message : " + "ERROR"); closeConnection(); }default void logFatal(String message){getConnection(); System.out.println("Log Message : " + "FATAL"); closeConnection(); }static void getConnection(){System.out.println("Open Database connection"); }static void closeConnection(){System.out.println("Close Database connection"); }}
The output of the above example is:
Open Database connection Log Message : INFO Close Database connection Open Database connection Log Message : WARN Close Database connection Open Database connection Log Message : ERROR Close Database connection Open Database connection Log Message : FATAL Close Database connection
Java 9 not only supports interface default methods like Java 8, but also supports private methods.
In Java 9, an interface can define the following types of variables/methods:
* **Constants**
* **Abstract methods**
* **Default methods**
* **Static methods**
* **Private methods**
* **Private static methods**
The following example extracts the redundancy into common methods, which looks much more concise:
## Example
public class Tester{public static void main(String[]args){LogOracle log = new LogOracle(); log.logInfo(""); log.logWarn(""); log.logError(""); log.logFatal(""); LogMySql log1 = new LogMySql(); log1.logInfo(""); log1.logWarn(""); log1.logError(""); log1.logFatal(""); }}final class LogOracle implements Logging{}final class LogMySql implements Logging{}interface Logging{String ORACLE = "Oracle_Database"; String MYSQL = "MySql_Database"; private void log(String message, String prefix){getConnection(); System.out.println("Log Message : " + prefix); closeConnection(); }default void logInfo(String message){log(message, "INFO"); }default void logWarn(String message){log(message, "WARN"); }default void logError(String message){log(message, "ERROR"); }default void logFatal(String message){log(message, "FATAL"); }private static void getConnection(){System.out.println("Open Database connection"); }private static void closeConnection(){System.out.println("Close Database connection"); }}
The output of the above example is:
Open Database connection Log Message : INFO Close Database connection Open Database connection Log Message : WARN Close Database connection Open Database connection Log Message : ERROR Close Database connection Open Database connection Log Message : FATAL Close Database connection
[ Java 9 New Features](#)
YouTip