Você está na página 1de 7

LOS INTERFACES Y LA HERENCIA MLTIPLE EN JAVA Un interface es parecido a una clase abstracta en Java, pero con las siguientes

diferencias: - Todo mtodo es abstracto y pblico sin necesidad de declararlo. Por lo tanto un interface en Java no implementa ninguno de los mtodos que declara. - Las variables del interface sern las variables miembro de la clase. - Un interface se implementa (implements) no se extiende (extends) por sus subclases. - Una clase puede implementar ms de un interfaz en Java, pero slo puede extender una clase. Es lo ms parecido que tiene Java a la herencia mltiple, que de clases normales est prohibida. - Podemos declarar variables del tipo de clase del interfaz, pero para inicializarlas tendremos que hacerlo de una clase que lo implemente. As, por ejemplo, podemos declarar el siguiente interfaz en Java: Interface Figura { int area(); } y una clase que lo implementa: public class Cuadrado implements Figura { int lado; public Cuadrado (int ladoParametro) { lado = ladoParametro; }

public int area(){ return lado*lado; } } Ms adelante podemos: public class PruebaInterfaz{

public static void main(String args[]){ Figura figura=new Cuadrado (5); //Podemos crear una referencia de interface(variable r) y que un objeto que pertenezca // a una clase que la implementa le sea asignada a la variable System.out.println(figura.area()); }

INTERFACES
Los mtodos abstractos son tiles cuando se quiere que cada implementacin de la clase parezca y funcione igual, pero necesita que se cree una nueva clase para utilizar los mtodos abstractos. Los interfaces proporcionan un mecanismo para abstraer los mtodos a un nivel superior. Un interface contiene una coleccin de mtodos que se implementan en otro lugar. Los mtodos de una clase son public, static y final. La principal diferencia entre interface y abstract es que un interface proporciona un mecanismo de encapsulacin de los protocolos de los mtodos 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 utilizarn la palabra implements y proporcionarn el cdigo necesario para implementar los mtodos que se han definido para el interface:
class MiClase implements VideoClip { void play() { <cdigo> } void bucle() { <cdigo> } void stop() { <cdigo> }

Al utilizar implements para el interface es como si se hiciese una accin de copiar-ypegar del cdigo del interface, con lo cual no se hereda nada, solamente se pueden usar los mtodos. La ventaja principal del uso de interfaces es que una clase interface puede ser implementada por cualquier nmero de clases, permitiendo a cada clase compartir el interfaz de programacin sin tener que ser consciente de la implementacin que hagan las otras clases que implementen el interface.
class MiOtraClase implements VideoClip { void play() { <cdigo nuevo> } void bucle() { <cdigo nuevo> } void stop() { <cdigo nuevo> }

II.9. INTERFACES A. Introduccin Las interfaces Java son expresiones puras de diseo. Se trata de autnticas conceptualizaciones no implementadas que sirven de gua para definir un determinado concepto (clase) y lo que debe hacer, pero sin desarrollar un mecanismo de solucin. Se trata de declarar mtodos abstractos y constantes que posteriormente puedan ser implementados de diferentes maneras segn las necesidades de un programa.

Por ejemplo una misma interfaz podra ser implementada en una versin de prueba de manera poco ptima, y ser acelerada convenientemente en la versin definitiva tras conocer ms a fondo el problema. B. Declaracin Para declarar una interfaz se utiliza la sentencia interface, de la misma manera que se usa la sentencia class: interface MiInterfaz {

int CONSTANTE = 100;

int metodoAbstracto( int parametro );

Se observa en la declaracin que las variables adoptan la declaracin en maysculas, pues en realidad actuarn como constantes final. En ningn caso estas variables actuarn como variables de instancia. Por su parte, los mtodos tras su declaracin presentan un punto y coma, en lugar de su cuerpo entre llaves. Son mtodos abstractos, por tanto, mtodos sin implementacin C. Implementacin de una interfaz Como ya se ha visto, las interfaces carecen de funcionalidad por no estar implementados sus mtodos, por lo que se necesita algn mecanismo para dar cuerpo a sus mtodos. La palabra reservada implements utilizada en la declaracin de una clase indica que la clase implementa la interfaz, es decir, que asume las constantes de la interfaz, y codifica sus mtodos: class ImplementaInterfaz implements MiInterfaz{

int multiplicando=CONSTANTE;

int metodoAbstracto( int parametro ){

return ( parametro * multiplicando );

En este ejemplo se observa que han de codificarse todos los mtodos que determina la interfaz (metodoAbstracto()), y la validez de las constantes (CONSTANTE) que define la interfaz durante toda la declaracin de la clase. Una interfaz no puede implementar otra interfaz, aunque s extenderla (extends) amplindola. D. Herencia mltiple Java es un lenguaje que incorpora herencia simple de implementacin pero que puede aportar herencia mltiple de interfaz. Esto posibilita la herencia mltiple en el diseo de los programas Java. Una interfaz puede heredar de ms de una interfaz antecesora. interface InterfazMultiple extends Interfaz1,Interfaz2{ } Una clase no puede tener ms que una clase antecesora, pero puede implementar ms de una interfaz: class MiClase extends SuPadre implements Interfaz1,Interfaz2{ } El ejemplo tpico de herencia mltiple es el que se presenta con la herencia en diamante:

Imagen 6: Ejemplo de herencia mltiple Para poder llevar a cabo un esquema como el anterior en Java es necesario que las clases A, B y C de la figura sean interfaces, y que la clase D sea una clase (que recibe la herencia mltiple): interface A{ } interface B extends A{ } interface C extends A{ } class D implements B,C{ } E. Colisiones en la herencia mltiple En una herencia mltiple, los identificadores de algunos mtodos o atributos pueden coincidir en la clase que hereda, si dos de las interfaces padres tienen algn mtodo o atributo que coincida en nombre. A esto se le llama colisin. Esto se dar cuando las clases padre (en el ejemplo anterior B y C) tienen un atributo o mtodo que se llame igual. Java resuelve el problema estableciendo una serie de reglas. Para la colisin de nombres de atributos, se obliga a especificar a qu interfaz base pertenecen al utilizarlos. Para la colisin de nombres en mtodos:

Si tienen el mismo nombre y diferentes parmetros: se produce sobrecarga de mtodos permitiendo que existan varias maneras de llamar al mismo. Si slo cambia el valor devuelto: se da un error de compilacin, indicando que no se pueden implementar los dos. Si coinciden en su declaracin: se elimina uno de los dos, con lo que slo queda uno.

F. Envolturas de los tipos simples

Los tipos de datos de Java no forman parte de la jerarqua de objetos. Sin embargo a veces es necesario crear una representacin como objeto de alguno de los tipos de datos simples de Java. La API de Java contiene un conjunto de interfaces especiales para modificar el comportamiento de los tipos de datos simple. A estas interfaces se las conoce como envolturas de tipo simple. Todas ellas son hijas de la clase abstracta Number y son:

Double: Da soporte al tipo double. Float: Da soporte al tipo float. Integer: Da soporte a los tipos int, short y byte. Long: Da soporte al tipo long. Character: Envoltura del tipo char. Boolean: Envoltorio al tipo boolean.

Para ms informacin sobre as envolturas de tipos simples, consltese [Naughton, 1996].

Você também pode gostar