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