YouTip LogoYouTip

Java9 Private Interface Methods

[![Image 1: Java 9 New Features](#) 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 [![Image 2: Java 9 New Features](#) Java 9 New Features](#)
← Java9 Enhanced Deprecated AnnoJava9 Repl β†’