Você está na página 1de 5

CLASES ABSTRACTAS, INTERFACES Y HERENCIA

MLTIPLE
Clases abstractas
Una clase abstracta es aquella que no implementa alguno de sus mtodos. Veamos un
ejemplo:

abstract class Figura {

protected double x;
protected double y;

public Figura(double x, double y){


this.x = x;
this.y = y;
}

abstract double perimetro();


}
Observa como el mtodo perimetro() de esta clase no se implementa por lo que hay
que utilizar la palabra reservadaabstract. Este mtodo se dice que es abstracto. Toda
clase que contenga algn mtodo abstracto tambin es abstracta, e igualmente, hay que
etiquetarla con la palabra reservada abstract.
No se puede instanciar un objeto de una clase abstracta, dado que no se ha definido todo
su comportamiento.
Una clase abstracta solo se utiliza para definir subclases. Veamos un ejemplo:

class Circulo extends Figura {

private double radio;

public Circulo(double x, double y, double radio){

super(x,y);
this.radio = radio;
}

public double perimetro(){


return 2*Matth.PI*radio;
}
}
Se puede crear una referencia a una clase abstracta:

Figura miFigura;
Pero no se puede crea un objeto de una clase abstracta:

miFigura = new Figura(100,100);


podemos asignar cualquier objeto descendiente a una referencia de una clase abstracta,
siempre que el descendiente no sea abstracto:

miFigura = new Circulo(100,100,50);


Recuerda que este tipo de operaciones se conoce como polimorfismo.

Interfaces
La interfaz es una clase abstracta pura, es decir, una clase donde se indican los mtodos,
pero no se implementa ninguno. Permite al programador establecer una estructura que ha
de seguir toda clase que implemente esta interfaz. En la interfaz solo se indica los
nombres de los mtodos, sus parmetros y tipos que retornan, pero no el cdigo de cada
mtodo. Una interfaz tambin puede contener constantes, es decir, campos de
tipo static y final, pero nunca pude campos de otro tipo. Veamos un ejemplo.

public interface Dibujable {


int AZUL = 0x0000FF;
void dibuja(int color);
void borra();
boolean estaDibujado();
}
Aunque no se haya indicado AZUL es declarado de tipo static y final. Es decir, una
interfaz puede definir constantes, pero nunca encapsular datos.
Una clase puede implementar una interface. En este caso est obligada a definir todos los
mtodos indicados. Veamos un ejemplo:

public class Dibujo implements Dibujable {

void dibuja(int color){

void borra(){

boolean estaDibujado(){

}
}
La clase Dibujo implementa la interface, por lo que ha de declarar todos los mtodos y
escribir el cdigo correspondiente

Herencia mltiple
Algunos lenguajes orientados a objeto, como C++, Perl o Python, soportan la herencia
mltiple. Es decir, pueden extender simultneamente ms de una clase. Esta caracterstica
presenta cierta ambigedad a la hora de acceder a los atributos de los padres, lo que hace
que aumente la complejidad del lenguaje.
Otros lenguajes, como Java, C#, Delphi o Objective-C, no soporta herencia mltiple. Por lo
que solo pueden extender de una clase; lo que simplifica en gran medida el lenguaje. Lo
que s que van a permitir estos lenguajes es que una clase adems de extender de su
padre puedan implementar varios interfaces.
La implementacin de una interface resulta mucho ms sencilla dado que no incorpora
variables, solo obliga a la clase a definir una lista de mtodos. Veamos un ejemplo:

class Circulo extends Figura implements Dibujable {

}
En este caso Circulo extiende Figura; por lo que va a incorporar las variables x e y
adems del mtodo abstracto perimetro(). Adems, implementa Dibujable por lo que
ha de definir los tres mtodos de esta interfaz.
De esta forma la clase Circulo tiene un doble comportamiento el heredado de Figura,
adems nos aseguramos que puede ser dibujado al implementar Dibujable:
Ejercicio paso a paso: La interfaz Lugares
En este ejercicio vamos a crear una interfaz que nos permita almacenar una lista de
objetos Lugar. A lo largo del curso esta interfaz ser implementada por dos clases. En esta
unidad usaremos una lista almacenada en memoria y en la ltima unidad una base de
datos.
1.

Abre el proyecto Mis Lugares Java.

2. En el explorador del proyecto, pulsa con el botn derecho sobre java /


org.example.mislugares y selecciona New > Java Class.

3.

Introduce en la nueva ventana en Name: Lugares, y en Kind: Interface.

4.

Reemplaza el cdigo por el siguiente (dejando la lnea del package):

public interface Lugares {


static Lugar elemento(int id); //Devuelve el elemento dado su id

static void anyade(Lugar lugar); //Aade el elemento indicado

static int nuevo(); //Aade un elemento en blanco y devuelve su id

static void borrar(int id); //Elimina el elemento con el id indicado

static int tamanyo(); //Devuelve el nmero de elementos


static void actualiza(int id, Lugar lugar); //Reemplaza un elemento
}
Una clase que implemente esta interface va a almacenar una lista de objetos de
tipo Lugar. Mediante los mtodos indicados vamos a poder acceder y modificar
esta lista.
5. Esta interface ser usada en uno de los siguientes apartados.

Você também pode gostar