Interfaces

Recordemos para que servían añadir “abstract”:

“Para evitar que se puedan generar objetos de la clase padre si es que no se quiere se tiene que añadir  Abstract de esta manera lo que se hará es que para esta clase será imposible instanciar objetos”.

En Java, una clase sólo tiene una superclase. No existe la herencia múltiple. Para solucionar las situaciones en las que es necesario definir una clase con características definidas en  más de una clase, se emplean interfaces.

Una interfaz es una colección de constantes y métodos abstractos.

No es una clase, sirven como guía, pero tienen varias limitantes:

  • No pueden contener atributos ni constructores y solo se pueden hacer métodos abstractos, que no se inicializan, es más ni siquiera se tiene que poner esa palabra.
  • Es imposible poder crear un objeto de esa clase.

Sintaxis:

public interface NombreDeInterfaz{
    public Constantes;
public MetodoAbstracto(…);
}

Para implementar una interfaz se usa la siguiente sintaxis:

public class ClaseHija implements NombreDeInterfaz{
   //Contenido de Clase
}
public class ClaseHija extends ClasePadre implements Interfaz1, Interfaz{
   //Contenido de Clase
}

¿Para que sirven?

Espera, espera, espera ¿Para que demonios quiero una interfaz?, digo, si no puedo crear objeto de ella ni atributos, ni anda así ¿para que la necesito?  ¿Porque no se llama interfaz, porque no clase basura o clase inútil?

Pues lo primero de todo es que clase inútil no suena nada mal. Me gusta.

Pero ya enserio, sirven a un solo propósito: Y es que cuando tu “extiendes” o “implementas” de una interfaz hay que redefinir todos los métodos incluidos en la interfaz.TODOS.

Por defecto, todas las interfaces son abstractas y todos los métodos de una interfaz abstractos y públicos, por eso no se especifica explícitamente

Las interfaces pueden formar jerarquías heredando de una interfaz determinada (cláusula extends).

Oye..antes de que te vayas, te daré un secreto…No se pueden instanciar Objetos, sin embargo si es posible hacer:

NombreDeInterfaz Instancia = new NombreDeClaseHija();

Este nuevo objeto, es capaz funciona como una instancia de NombreDeClaseHija siempre que esas referencias estén también en la Interfaz, es decir, si hay un método propio de la clase o un atributo, el programa crashea, pero si solo haces referencia a los métodos que existen en la interfaz, todo esta bien.


Así que en resumen podemos darle estos usos a las interfaces:

  • Como un contrato de Software, que te obliga a implementar unos métodos específicos  con un nombre, tipos de datos de entrada y salida ya definidos, así todo el proyecto queda mas consistente.
  • Permite emular una jerarquia múltiple.
  • Permite el Poliformismo como allá arriba.


Diferencias entre Interface y Clase abstracta

interfaces

Interfaz vs Clase Abstracta… Fight!

La principal diferencia entre interface y una clase abstracta abstract es que un interfaz proporciona un mecanismo de encapsulación de los prototipos de  los métodos evitando al desarrollador forzar  una relación de herencia.

La ventaja principal del uso de interfaces es que una clase interface puede ser implementada por cualquier número de clases, permitiendo a cada clase compartir el interfaz de programación sin tener que ser consciente de la implementación que hagan las otras clases que implementen el interface.

Una clase abstracta puede incluir métodos implementados y no implementados o abstractos, constantes y otros atributos.

Una clase solamente puede derivar (extends) de una clase base, pero puede implementar varios interfaces. Los nombres de los interfaces se colocan separados por una coma después de la palabra reservada implements.

El lenguaje Java no fuerza por tanto, una relación jerárquica, simplemente permite que clases no relacionadas puedan tener algunas características de su comportamiento similares.

Y ya, lo has logrado

¿No fue divertido?

lisa.jpg

 

 

btn1 btn
btn

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s