English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriales básicos de Java

Control de flujo de Java

Java array

Java orientado a objetos (I)

Java orientado a objetos (II)

Java orientado a objetos (III)

Manejo de excepciones en Java

Java lista (List)

Java cola (Queue)

Java conjuntos Map

Java conjuntos Set

Java entrada/salida (I/O)

Reader de Java/Writer

Otras temáticas de Java

Java 9 Métodos de interfaz privados

Java 9 Nuevas características

En Java 8Antes, el interfaz podía tener variables de constante y métodos abstractos.

No podemos proporcionar una implementación de métodos en el interfaz. Si queremos proporcionar una combinación de métodos abstractos y no abstractos (métodos con implementación), entonces debemos usar una clase abstracta.

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("Abrir conexión de base de datos");
   }
   @Override
   public void closeConnection() {
      System.out.println("Cerrar conexión de base de datos");
   }
}
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("Abrir conexión de base de datos");
   }
   @Override
   public void closeConnection() {
      System.out.println("Cerrar conexión de base de datos");
   }
}
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();
}

El resultado de ejecutar el ejemplo anterior es:

Abrir conexión de base de datos
Mensaje de registro: INFO
Cerrar conexión de base de datos
Abrir conexión de base de datos
Mensaje de registro: WARN
Cerrar conexión de base de datos
Abrir conexión de base de datos
Mensaje de registro: ERROR
Cerrar conexión de base de datos
Abrir conexión de base de datos
Mensaje de registro: FATAL
Cerrar conexión de base de datos

En el ejemplo anterior, cada método de registro tiene su propia implementación.

En Java 8 El interfaz introduce algunas nuevas características: métodos por defecto y métodos estáticos. Podemos usarlos en Java SE 8El método de implementación se escribe en el interfaz, solo se necesita usar la palabra clave default para definirlos.

En Java 8 En una interfaz se pueden definir varios tipos de variables como se muestra a continuación/Método:

  • Constante

  • Método abstracto

  • Método por defecto

  • Método estático

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 { 
}
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("Abrir conexión de base de datos");
   }
   static void closeConnection() {
      System.out.println("Cerrar conexión de base de datos");
   }
}

El resultado de ejecutar el ejemplo anterior es:

Abrir conexión de base de datos
Mensaje de registro: INFO
Cerrar conexión de base de datos
Abrir conexión de base de datos
Mensaje de registro: WARN
Cerrar conexión de base de datos
Abrir conexión de base de datos
Mensaje de registro: ERROR
Cerrar conexión de base de datos
Abrir conexión de base de datos
Mensaje de registro: FATAL
Cerrar conexión de base de datos

Java 9 No solo como Java 8 además de soportar métodos de interfaz por defecto, también admite métodos privados.

En Java 9 En una interfaz se pueden definir varios tipos de variables como se muestra a continuación/Método:

  • Constante

  • Método abstracto

  • Método por defecto

  • Método estático

  • Método privado

  • Método estático privado

El siguiente ejemplo extrae redundancias a métodos genéricos, lo que parece más conciso:

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 { 
}
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("Abrir conexión de base de datos");
   }
   private static void closeConnection() {
      System.out.println("Cerrar conexión de base de datos");
   }
}

El resultado de ejecutar el ejemplo anterior es:

Abrir conexión de base de datos
Mensaje de registro: INFO
Cerrar conexión de base de datos
Abrir conexión de base de datos
Mensaje de registro: WARN
Cerrar conexión de base de datos
Abrir conexión de base de datos
Mensaje de registro: ERROR
Cerrar conexión de base de datos
Abrir conexión de base de datos
Mensaje de registro: FATAL
Cerrar conexión de base de datos

Java 9 Nuevas características