viernes, 22 de mayo de 2020

Interfaces

Es un tipo de referencia que está estrechamente relacionado con una clase al tener múltiples similitudes con estas.

Definir una interfaz es muy parecido a definir una clase abstracta:

  1. /* se usa la palabra reservada "interface" */
  2. public interface InterfazDeJava{
  3. }


Cuando define una interfaz se crea una referencia similar a una clase con la principal diferencia en que no define ninguna implementación de sus métodos. Además, presenta las siguientes características o restricciones.

  • Una interfaz no puede ser instanciada, por lo que no se define un constructor.
  • Los únicos campos permitidos en una definición de interfaz son constantes que se declaran tanto estáticas como finales.
  • Una interfaz define una API pública. Todos los métodos de una interfaz son implícitamente públicos, incluso si se omite el modificador público. Es un error definir un método protegido o privado en una interfaz.
  • Una interfaz no contiene implementación alguna. Todos los métodos de una interfaz son implícitamente abstractos, incluso si se omite el modificador abstracto.
  • Las interfaces pueden heredar de otras interfaces y pueden soportar herencia múltiple.
  • Son las clases que al implementar una interfaz mediante la palabra reservada "implements" implementan el código de los métodos declarados en una interfaz.
  • Una interfaz puede ser implementada en múltiples clases y una clase puede implementar múltiples interfaces.

Ejemplo de interfaz y su implementación en código

Código de la interfaz:

  1. public interface Calculadora {
  2. Float sumar(Float a, Float b);
  3. Float restar(Float a, Float b);
  4. Float multiplicar(Float a, Float b);
  5. Float dividir(Float a, Float b);
  6. String getMensaje();
  7. }



Código de la clase:

  1. public class CalculadoraDecimal implements Calculadora {
  2. private String mensaje;
  3. public CalculadoraDecimal() {
  4. }
  5. @Override
  6. public Float sumar(Float a, Float b) {
  7. mensaje = null;
  8. return a + b;
  9. }
  10. @Override
  11. public Float restar(Float a, Float b) {
  12. mensaje = null;
  13. return a + b;
  14. }
  15. @Override
  16. public Float multiplicar(Float a, Float b) {
  17. mensaje = null;
  18. return a + b;
  19. }
  20. @Override
  21. public Float dividir(Float a, Float b) {
  22. if (b == 0) {
  23. mensaje = "No se puede dividir entre cero";
  24. return null;
  25. } else {
  26. mensaje = null;
  27. return a / b;
  28. }
  29. }
  30. @Override
  31. public String getMensaje() {
  32. return mensaje;
  33. }
  34. }

Herencia en interfaces

Como se ha mencionado, las interfaces pueden heredar de otras interfaces sus métodos y constantes. Aquí las superinterfaces (similar a las superclases) deben colocarse luego de la palabra reservada "extends"

Herencia simple:


  1. /* se usa la palabra reservada "extends " */
  2. public interface InterfazHija extends InterfazPadre{
  3. }

Herencia múltiple:


  1. /* se usa la palabra reservada "extends " */
  2. public interface InterfazHija extends InterfazPadre1, InterfazPadre2{
  3. }


Fuentes:

  • Flanagan, D. (2002). JAVA IN A NUTSHELL Desktop Quick Reference (4a ed.). England: Pearson Education.


No hay comentarios:

Publicar un comentario