Interfaces en Java | Concepto
- Carlos Brignardello
- 11 Oct, 2024
¿Qué es una interfaz?
Las interfaces no dejan de ser contratos o definiciones de cómo va a funcionar una clase, una interfaz es un plano de construcción, como tal lo que nos permite es establecer una serie de métodos que van a ser obligatorios o que sí o sí deben definirse en determinada clase.
Puedes entender una interfaz como si fuera como una especie de manual para poder construir una herramienta una especie de plano o un contrato, lo que nos entregan las interfaces son una serie de lineamientos una serie de requerimientos que se deben respetar al momento de que creemos una clase.
Implementación
Las interfaces para aplicarse sobre una clase se deben implementar, en Java contamos con la palabra clave: implement
para hacer esto.
Por qué usamos interfaces
Podemos crear una interfaz para definir cómo se DEBEN trabajar dos clases que compartan muchas características, pero que su lógica de negocio puede variar en cada caso. Esto nos ayuda a facilitar los futuros cambios y a no repetir código.
- Permiten trabajar un código más ordenado, predecible y fácil de entender.
- Ayuda a reutilizar código.
- Una herramienta para modularizar.
- Facilita futuros cambios, escalar la aplicación, extenderla.
Interfaz en Java
En Java las interfaces pueden contener solo métodos abstractos y constantes. O métodos por defecto y métodos estáticos.
- Se suelen nombrar anteponiendo una “I” de interface.
- Los nombres suelen terminar en -able, -ible: Runnable. También, si la interfaz representa un rol u objeto, se puede nombrar cómo: List, Map, etc.
¿Qué es abstracción?
Se trata de esconder la lógica compleja de modo que sea fácil de implementar para cualquier persona y así sea fácil extender la aplicación.
Métodos obligatorios
En esencia las interfaces lo que agregan son reglas adicionales sobre como debe funcionar una clase, especificamente podemos definir por un lado que funciones seran obligatorias de implementar y que firma o métodos tendrá esa clase.
Interfaz
public interface Mensaje {
public String created();
public String deleted(Long id);
}
Implementación
public class ResponseMensaje implements Mensaje {
@Override public String created() {
return "Registro creado exitosamente.";
}
@Override public String deleted(Long id) {
return "El registro " + id + " fue eliminado.";
}
}
Métodos por defecto
Los métodos por defecto usan la palabra clave default
, estos métodos al ser implementados son opcionales de implementar, pues es como si ya los hubiéramos implementado. También los podemos sobreescribir para tener un comportamiento nuevo.
public interface MiInterfaz {
default void metodoPorDefecto() {
System.out.println("Este es un método por defecto");
}
}
Métodos estáticos
Los métodos estáticos usan la palabra reservada static
, son métodos que pertenecen a la interfaz. Estos no son implementados, sino que, por ejemplo, al llamar a la interfaz podremos acceder a su método sin la necesidad de implementar la clase.
Son utilizados para casos muy específicos:
- Agrupar métodos de utilidades.
- Son útiles para operaciones que no dependen del estado de un objeto y se pueden usar como métodos utilitarios.
- No requiere instancias.
interface InterfazConEstatico {
static void metodoEstatico() {
System.out.println("Este es un método estático");
}
}
public class ClasePrincipal {
public static void main(String[] args) {
InterfazConEstatico.metodoEstatico(); // Llamada al método estático
}
}
Herencia múltiple
Java no soporta la herencia múltiple, sin embargo, sí podemos implementar más de una interfaz. Por tanto, podemos simular la herencia múltiple.
// Implementar métodos de Interfaz1 y Interfaz2
public class MiClase implements Interfaz1, Interfaz2 {
}
Para que esto funcione, en la interfaz debemos implementar métodos por defecto, para que de esta manera las interfaces actúen como clases y tengan un comportamiento parecido al de una clase heredada.
default void metodoPorDefecto() {
System.out.println("Este es un método por defecto");
}
Conclusión
Con estos pasos, hemos creado una aplicación Quarkus que implementa el Patrón Repository para manejar la persistencia de datos de manera eficiente y organizada. Este enfoque facilita el mantenimiento y la escalabilidad del código.