课程表

Java 基础教程

Java 面向对象

Java 高级教程

工具箱
速查手册

Java 9 私有接口方法

当前位置:免费教程 » Java相关 » Java

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

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

  1. public class Tester {
  2.    public static void main(String []args) {
  3.       LogOracle log = new LogOracle();
  4.       log.logInfo("");
  5.       log.logWarn("");
  6.       log.logError("");
  7.       log.logFatal("");
  8.       LogMySql log1 = new LogMySql();
  9.       log1.logInfo("");
  10.       log1.logWarn("");
  11.       log1.logError("");
  12.       log1.logFatal("");
  13.    }
  14. }
  15. final class LogOracle implements Logging {
  16.    @Override
  17.    public void logInfo(String message) {
  18.       getConnection();
  19.       System.out.println("Log Message : " + "INFO");
  20.       closeConnection();
  21.    }
  22.    @Override
  23.    public void logWarn(String message) {
  24.       getConnection();
  25.       System.out.println("Log Message : " + "WARN");
  26.       closeConnection();
  27.    }
  28.    @Override
  29.    public void logError(String message) {
  30.       getConnection();
  31.       System.out.println("Log Message : " + "ERROR");
  32.       closeConnection();
  33.    }
  34.    @Override
  35.    public void logFatal(String message) {
  36.       getConnection();
  37.       System.out.println("Log Message : " + "FATAL");
  38.       closeConnection();
  39.    }
  40.    @Override
  41.    public void getConnection() {
  42.       System.out.println("Open Database connection");
  43.    }
  44.    @Override
  45.    public void closeConnection() {
  46.       System.out.println("Close Database connection");
  47.    }
  48. }
  49. final class LogMySql implements Logging {
  50.    @Override
  51.    public void logInfo(String message) {
  52.       getConnection();
  53.       System.out.println("Log Message : " + "INFO");
  54.       closeConnection();
  55.    }
  56.    @Override
  57.    public void logWarn(String message) {
  58.       getConnection();
  59.       System.out.println("Log Message : " + "WARN");
  60.       closeConnection();
  61.    }
  62.    @Override
  63.    public void logError(String message) {
  64.       getConnection();
  65.       System.out.println("Log Message : " + "ERROR");
  66.       closeConnection();
  67.    }
  68.    @Override
  69.    public void logFatal(String message) {
  70.       getConnection();
  71.       System.out.println("Log Message : " + "FATAL");
  72.       closeConnection();
  73.    }
  74.    @Override
  75.    public void getConnection() {
  76.       System.out.println("Open Database connection");
  77.    }
  78.    @Override
  79.    public void closeConnection() {
  80.       System.out.println("Close Database connection");
  81.    }
  82. }
  83. interface Logging {
  84.    String ORACLE = "Oracle_Database";
  85.    String MYSQL = "MySql_Database";
  86.  
  87.    void logInfo(String message);
  88.    void logWarn(String message);
  89.    void logError(String message);
  90.    void logFatal(String message);
  91.  
  92.    void getConnection();
  93.    void closeConnection();
  94. }

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

  1. Open Database connection
  2. Log Message : INFO
  3. Close Database connection
  4. Open Database connection
  5. Log Message : WARN
  6. Close Database connection
  7. Open Database connection
  8. Log Message : ERROR
  9. Close Database connection
  10. Open Database connection
  11. Log Message : FATAL
  12. Close Database connection

在上面的例子中,每个日志方法都有自己的实现。

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

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

  • 常量

  • 抽象方法

  • 默认方法

  • 静态方法

  1. public class Tester {
  2.    public static void main(String []args) {
  3.       LogOracle log = new LogOracle();
  4.       log.logInfo("");
  5.       log.logWarn("");
  6.       log.logError("");
  7.       log.logFatal("");
  8.       
  9.       LogMySql log1 = new LogMySql();
  10.       log1.logInfo("");
  11.       log1.logWarn("");
  12.       log1.logError("");
  13.       log1.logFatal("");
  14.    }
  15. }
  16. final class LogOracle implements Logging { 
  17. }
  18. final class LogMySql implements Logging { 
  19. }
  20. interface Logging {
  21.    String ORACLE = "Oracle_Database";
  22.    String MYSQL = "MySql_Database";
  23.  
  24.    default void logInfo(String message) {
  25.       getConnection();
  26.       System.out.println("Log Message : " + "INFO");
  27.       closeConnection();
  28.    }
  29.    default void logWarn(String message) {
  30.       getConnection();
  31.       System.out.println("Log Message : " + "WARN");
  32.       closeConnection();
  33.    }
  34.    default void logError(String message) {
  35.       getConnection();
  36.       System.out.println("Log Message : " + "ERROR");
  37.       closeConnection();
  38.    }
  39.    default void logFatal(String message) {
  40.       getConnection();
  41.       System.out.println("Log Message : " + "FATAL");
  42.       closeConnection();
  43.    }
  44.    static void getConnection() {
  45.       System.out.println("Open Database connection");
  46.    }
  47.    static void closeConnection() {
  48.       System.out.println("Close Database connection");
  49.    }
  50. }

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

  1. Open Database connection
  2. Log Message : INFO
  3. Close Database connection
  4. Open Database connection
  5. Log Message : WARN
  6. Close Database connection
  7. Open Database connection
  8. Log Message : ERROR
  9. Close Database connection
  10. Open Database connection
  11. Log Message : FATAL
  12. Close Database connection

Java 9 不仅像 Java 8 一样支持接口默认方法,同时还支持私有方法。

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

  • 常量

  • 抽象方法

  • 默认方法

  • 静态方法

  • 私有方法

  • 私有静态方法

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

  1. public class Tester {
  2.    public static void main(String []args) {
  3.       LogOracle log = new LogOracle();
  4.       log.logInfo("");
  5.       log.logWarn("");
  6.       log.logError("");
  7.       log.logFatal("");
  8.       
  9.       LogMySql log1 = new LogMySql();
  10.       log1.logInfo("");
  11.       log1.logWarn("");
  12.       log1.logError("");
  13.       log1.logFatal("");
  14.    }
  15. }
  16. final class LogOracle implements Logging { 
  17. }
  18. final class LogMySql implements Logging { 
  19. }
  20. interface Logging {
  21.    String ORACLE = "Oracle_Database";
  22.    String MYSQL = "MySql_Database";
  23.  
  24.    private void log(String message, String prefix) {
  25.       getConnection();
  26.       System.out.println("Log Message : " + prefix);
  27.       closeConnection();
  28.    }
  29.    default void logInfo(String message) {
  30.       log(message, "INFO");
  31.    }
  32.    default void logWarn(String message) {
  33.       log(message, "WARN");
  34.    }
  35.    default void logError(String message) {
  36.       log(message, "ERROR");
  37.    }
  38.    default void logFatal(String message) {
  39.       log(message, "FATAL");
  40.    }
  41.    private static void getConnection() {
  42.       System.out.println("Open Database connection");
  43.    }
  44.    private static void closeConnection() {
  45.       System.out.println("Close Database connection");
  46.    }
  47. }

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

  1. Open Database connection
  2. Log Message : INFO
  3. Close Database connection
  4. Open Database connection
  5. Log Message : WARN
  6. Close Database connection
  7. Open Database connection
  8. Log Message : ERROR
  9. Close Database connection
  10. Open Database connection
  11. Log Message : FATAL
  12. Close Database connection


转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号