在Java 8之前,接口可以具有以下类型的变量/方法。
- Constant variables (常量)
- Abstract methods (抽象方法)
因此,无涯教程不能在接口中实现方法实现,或更确切地说,不能在Java 8之前拥有默认实现。请参见示例。
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(); }
您将看到以下输出。
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
在上面的示例中,每个log方法都有其自己的实现。使用Java 8接口可以具有以下类型的变量/方法。
- Constant variables (常量)
- Abstract methods (抽象方法)
- Default methods (默认方法)
- Static methods (静态方法)
让无涯教程使用Java 8在接口本身中使用默认实现和静态方法。
public class Tester {
public static void main(String []args) {
LogOracle log = new LogOracle();
log.logInfo("");
log.logWarn("");
log.logError("");
log.logFatal("");
</span><span class="typ">LogMySql</span><span class="pln"> log1 </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">LogMySql</span><span class="pun">();</span><span class="pln">
log1</span><span class="pun">.</span><span class="pln">logInfo</span><span class="pun">(</span><span class="str">""</span><span class="pun">);</span><span class="pln">
log1</span><span class="pun">.</span><span class="pln">logWarn</span><span class="pun">(</span><span class="str">""</span><span class="pun">);</span><span class="pln">
log1</span><span class="pun">.</span><span class="pln">logError</span><span class="pun">(</span><span class="str">""</span><span class="pun">);</span><span class="pln">
log1</span><span class="pun">.</span><span class="pln">logFatal</span><span class="pun">(</span><span class="str">""</span><span class="pun">);</span><span class="pln">
}
}
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");
}
}
您将看到以下输出。
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接口可以具有以下类型的变量/方法。
- Constant variables (常量)
- Abstract methods (抽象方法)
- Default methods (默认方法)
- Static methods (静态方法)
- Private methods (私有方法)
- Private Static methods (私有静态方法)
让无涯教程拥有私有方法,并在Java 9中使用它们。
public class Tester {
public static void main(String []args) {
LogOracle log = new LogOracle();
log.logInfo("");
log.logWarn("");
log.logError("");
log.logFatal("");
</span><span class="typ">LogMySql</span><span class="pln"> log1 </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">LogMySql</span><span class="pun">();</span><span class="pln">
log1</span><span class="pun">.</span><span class="pln">logInfo</span><span class="pun">(</span><span class="str">""</span><span class="pun">);</span><span class="pln">
log1</span><span class="pun">.</span><span class="pln">logWarn</span><span class="pun">(</span><span class="str">""</span><span class="pun">);</span><span class="pln">
log1</span><span class="pun">.</span><span class="pln">logError</span><span class="pun">(</span><span class="str">""</span><span class="pun">);</span><span class="pln">
log1</span><span class="pun">.</span><span class="pln">logFatal</span><span class="pun">(</span><span class="str">""</span><span class="pun">);</span><span class="pln">
}
}
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");
}
}
您将看到以下输出。
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