##
INTERFACES

Los métodos abstractos son útiles cuando se quiere que cada implementación de la clase parezca y funcione igual, pero necesita que se cree una nueva clase para utilizar los métodos abstractos.

Los interfaces proporcionan un mecanismo para abstraer los métodos a un nivel superior.

Un interface contiene una colección de métodos que se implementan en otro lugar. Los métodos de una clase son public, static y final.

La principal diferencia entre interface y abstract es que un interface proporciona un mecanismo de encapsulación de los protocolos de los métodos sin forzar al usuario a utilizar la herencia.

Por ejemplo:

        public interface VideoClip {
             // comienza la reproduccion del video
             void play();
             // reproduce el clip en un bucle
             void bucle();
             // detiene la reproduccion
             void stop();
             }

Las clases que quieran utilizar el interface VideoClip utilizarán la palabra implements y proporcionarán el código necesario para implementar los métodos que se han definido para el interface:

        class MiClase implements VideoClip {
             void play() {
                 <código>
                 }
             void bucle() {
                 <código>
                 }
             void stop() {
                 <código>
                 }

Al utilizar `implements` para el interface es como si se hiciese una acción de copiar-y-pegar del código del interface, con lo cual no se hereda nada, solamente se pueden usar los métodos.

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.

        class MiOtraClase implements VideoClip {
             void play() {
                 <código nuevo>
                 }
             void bucle() {
                 <código nuevo>
                 }
             void stop() {
                 <código nuevo>
                 }

|  | ##### [Anterior] [Indice] [Siguiente]