miércoles, 3 de octubre de 2012

Interfaces

Buenas amigos, en este nuevo tema vamos a comentar las "Interfaces". Una interfaz es un conjunto de métodos abstractos y de constantes cuya funcionalidad es la de determinar el funcionamiento de una clase, es decir, funciona como un molde o como una plantilla. Al ser sus métodos abstractos estos no tiene funcionalidad alguna, sólo se definen su tipo, argumento y tipo de retorno.

La construcción de una Interfaz es la siguiente:

      • public Interfaz NombreInterfaz{
          • //Código
      • }

Para declarar una o más Interfaces ponemos, a la derecha del nombre de la clase, la palabra clave "implements" seguido de los nombres de las interfaces separadas por comas.:

      • class NombreClase implements Interfaz1,Interfaz2,Interfaz3{
          • //Código
      • }
También es posible heredar e implementar al mismo tiempo:
      • class NombreClase extends Herencia implements Interfaz1,Interfaz2,Interfaz3{
          • //Código
      • }

Veamos algunas características de las Interfaces:

  • Las Interfaces solo pueden tener visibilidad de package o public.
  • Todos los métodos declarados en una Interfaz son public y abstract, si no se le indica, Java lo pondrá implícitamente.
  • Los métodos de una Interfaz no pueden ser estáticos, ya que estos deben ser redefinidos, y al ser estáticos les sería imposible.
  • Todos los atributos declarados en una Interfaz son "public static final" y deberán tener asignado un valor constante. Todos los nombres de constantes van en "MAYÚSCULAS"
  • Una clase puede implementar una o más interfaces.
  • Una Interfaz puede heredar de una o varias interfaces, pero no pueden implementar NADA. Como sabemos, las clases solo pueden heredar de otra clase, pero las Interfaces pueden hacer herencia múltiples.
  • Todas las clases que implementen una interfaz deben de redefinir todos los métodos de esa interfaz.
  • Las interfaces no tienen constructor, por lo que no es posible crear objetos con el operador "new" de ésta.
  • Si se implementa en una clase una Interfaz, y esta Interfaz hereda de otra, la clase deberá implementar todos los métodos de la interfaz que implementa y de los métodos que esta hereda.
  • Para la herencia de las interfaces se pone la palabra clave extends y se ponen todas las interfaces que se deseen separadas por comas.
  • Una Interfaz puede ocultar constantes y métodos heredados de otras Interfaces si los vuelve a declarar en la clase que hereda.

Veamos un ejemplo:
Esta interfaz contiene:
  • 2 Atributos constantes NUMERO1 y NUMERO2. Observaréis que un atributo es declarado como "final" y otro no, pues bien, aunque no se lo pongamos, java nos lo incluye implícitamente, con lo cual, aunque o esté puesto, sigue siendo "final"
  • 4 métodos. Dijimos anteriormente que los métodos de una interfaz deben ser "public" y "abstract", yo en este ejemplo no los he puesto, ya que, como en el caso de los atributos, java nos pone los métodos "public" y "abstract" implícitamente.

  • Creamos una clase con método MAIN e implementamos la interfaz Operaciones.
  • Posteriormente deberemos redefinir sus métodos. Veréis que en el tipo de retorno obtengo los atributos de la interfaz Operaciones y puesto que no podemos crear objetos de la interfaz, ya que no utiliza constructores, hacemos su llamada a los atributos como:
        • Operaciones.NUMERO1
        • Operaciones.NUMERO2.
  • Esto es debido a que son estáticos e inmutables. Este tipo de llamada también la vimos en la clase Math
  • Posteriormente en la MAIN creamos un objeto de la clase Principal y llamamos a todos sus métodos y los mostramos por pantalla.
Una cosa que me gustaría dejar más o menos clara, y es que en la MAIN creamos un objeto de la clase Principal para llamar a sus métodos y no hacemos la llamada simplemente. Esto es debido a que la MAIN es un método estático y como tal solo puede aceptar atributos y métodos estáticos  como los métodos que redefinimos de la interfaz no pueden ser estáticos, creo un objeto de la propia clase y los voy llamando. En temas posteriores haré una entrada para explicar mejor la palabra reservada "static".

Bien amigos, espero haber sido de ayuda. 

Un saludo.


15 comentarios:

  1. Bastante bien explicado las características de Interfaces.

    ResponderEliminar
  2. Excelente explicación!! Me sirvió mucho

    ResponderEliminar
  3. Excelente explicación, me ayudó mucho.

    ResponderEliminar
  4. Por fin alguien que pone ejemplos claros, muchas gracias, al final no era tan complicado lo de interfaz...

    ResponderEliminar
  5. excelente explicacion gracias !!

    ResponderEliminar
  6. por fin una buena explicación después de pasar por 1000 paginas

    ResponderEliminar
  7. Muy bien explicado, muchas gracias!

    ResponderEliminar