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