Java 9 私有接口方法

Java 9  私有接口方法 Java 9 新特性

在 Java 8之前,接口可以有常量变量和抽象方法。

我们不能在接口中提供方法实现。如果我们要提供抽象方法和非抽象方法(方法与实现)的组合,那么我们就得使用抽象类。

实例

publicclassTester{publicstaticvoidmain(String[]args){LogOraclelog = newLogOracle(); log.logInfo(""); log.logWarn(""); log.logError(""); log.logFatal(""); LogMySqllog1 = newLogMySql(); log1.logInfo(""); log1.logWarn(""); log1.logError(""); log1.logFatal(""); }}finalclassLogOracleimplementsLogging{ @OverridepublicvoidlogInfo(Stringmessage){getConnection(); System.out.println("Log Message : " + "INFO"); closeConnection(); } @OverridepublicvoidlogWarn(Stringmessage){getConnection(); System.out.println("Log Message : " + "WARN"); closeConnection(); } @OverridepublicvoidlogError(Stringmessage){getConnection(); System.out.println("Log Message : " + "ERROR"); closeConnection(); } @OverridepublicvoidlogFatal(Stringmessage){getConnection(); System.out.println("Log Message : " + "FATAL"); closeConnection(); } @OverridepublicvoidgetConnection(){System.out.println("Open Database connection"); } @OverridepublicvoidcloseConnection(){System.out.println("Close Database connection"); }}finalclassLogMySqlimplementsLogging{ @OverridepublicvoidlogInfo(Stringmessage){getConnection(); System.out.println("Log Message : " + "INFO"); closeConnection(); } @OverridepublicvoidlogWarn(Stringmessage){getConnection(); System.out.println("Log Message : " + "WARN"); closeConnection(); } @OverridepublicvoidlogError(Stringmessage){getConnection(); System.out.println("Log Message : " + "ERROR"); closeConnection(); } @OverridepublicvoidlogFatal(Stringmessage){getConnection(); System.out.println("Log Message : " + "FATAL"); closeConnection(); } @OverridepublicvoidgetConnection(){System.out.println("Open Database connection"); } @OverridepublicvoidcloseConnection(){System.out.println("Close Database connection"); }}interfaceLogging{StringORACLE = "Oracle_Database"; StringMYSQL = "MySql_Database"; voidlogInfo(Stringmessage); voidlogWarn(Stringmessage); voidlogError(Stringmessage); voidlogFatal(Stringmessage); voidgetConnection(); voidcloseConnection(); }

以上实例执行输出结果为:

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 8 接口引入了一些新功能——默认方法和静态方法。我们可以在Java SE 8的接口中编写方法实现,仅仅需要使用 default 关键字来定义它们。

在 Java 8 中,一个接口中能定义如下几种变量/方法:

  • 常量
  • 抽象方法
  • 默认方法
  • 静态方法

实例

publicclassTester{publicstaticvoidmain(String[]args){LogOraclelog = newLogOracle(); log.logInfo(""); log.logWarn(""); log.logError(""); log.logFatal(""); LogMySqllog1 = newLogMySql(); log1.logInfo(""); log1.logWarn(""); log1.logError(""); log1.logFatal(""); }}finalclassLogOracleimplementsLogging{}finalclassLogMySqlimplementsLogging{}interfaceLogging{StringORACLE = "Oracle_Database"; StringMYSQL = "MySql_Database"; defaultvoidlogInfo(Stringmessage){getConnection(); System.out.println("Log Message : " + "INFO"); closeConnection(); }defaultvoidlogWarn(Stringmessage){getConnection(); System.out.println("Log Message : " + "WARN"); closeConnection(); }defaultvoidlogError(Stringmessage){getConnection(); System.out.println("Log Message : " + "ERROR"); closeConnection(); }defaultvoidlogFatal(Stringmessage){getConnection(); System.out.println("Log Message : " + "FATAL"); closeConnection(); }staticvoidgetConnection(){System.out.println("Open Database connection"); }staticvoidcloseConnection(){System.out.println("Close Database connection"); }}

以上实例执行输出结果为:

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 不仅像 Java 8 一样支持接口默认方法,同时还支持私有方法。

在 Java 9 中,一个接口中能定义如下几种变量/方法:

  • 常量
  • 抽象方法
  • 默认方法
  • 静态方法
  • 私有方法
  • 私有静态方法

以下实例提取了冗余到通用方法,看起来明显更简洁:

实例

publicclassTester{publicstaticvoidmain(String[]args){LogOraclelog = newLogOracle(); log.logInfo(""); log.logWarn(""); log.logError(""); log.logFatal(""); LogMySqllog1 = newLogMySql(); log1.logInfo(""); log1.logWarn(""); log1.logError(""); log1.logFatal(""); }}finalclassLogOracleimplementsLogging{}finalclassLogMySqlimplementsLogging{}interfaceLogging{StringORACLE = "Oracle_Database"; StringMYSQL = "MySql_Database"; privatevoidlog(Stringmessage, Stringprefix){getConnection(); System.out.println("Log Message : " + prefix); closeConnection(); }defaultvoidlogInfo(Stringmessage){log(message, "INFO"); }defaultvoidlogWarn(Stringmessage){log(message, "WARN"); }defaultvoidlogError(Stringmessage){log(message, "ERROR"); }defaultvoidlogFatal(Stringmessage){log(message, "FATAL"); }privatestaticvoidgetConnection(){System.out.println("Open Database connection"); }privatestaticvoidcloseConnection(){System.out.println("Close Database connection"); }}

以上实例执行输出结果为:

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  私有接口方法 Java 9 新特性