无涯教程-Java9 - 私有接口方法

59 阅读3分钟

在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

参考链接

www.learnfk.com/java/java9-…