Interfaces

Bueno… Tras ver en que consiste una clase abstracta ahora vamos a ver lo que es una interfaz. “¡Pos lo mismo!” Una interfaz no es nada mas que una clase total, completa y puramente abstracta. Una interfaz es la definición de unos métodos y unos campos que en este caso serán siempre constantes. Entonces…. ¿Que ventaja tiene una interfaz frente a una clase abstracta? Pues principalmente 2.

Por un lado práctico. Una clase puede implementar varias interfaces mientras que por otro lado una clase sólo puede heredar de un padre por lo que una clase no puede implementar varias clases abstractas. Por otro lado conceptual. Una clase abstracta es, al fin y al cabo una clase mientras una inerfaz no deja de ser una mera careta.

Como siempre, creo que con este ejemplo lo verás mejor:

//interfaces.java
// Funcionamiento de las interfaces
// la gran ventaja de las interfaces frente a las clases abstractas
// es que se pueden convinar en la herencia. una clase puede implementar
// diversas interfaces
import java.util.*;
interface PuedeLuchar{
	int fuerza = 5;
	void luchar();
}
//-----------------------------
interface PuedeNadar{
	void nadar();
}
//-----------------------------
interface PuedeVolar{
	void volar();
}
//-----------------------------
class PersonajeDeAccion{
	public void luchar(){};
}
//-----------------------------
class Heroe extends PersonajeDeAccion implements PuedeLuchar, PuedeNadar, PuedeVolar{
	public void nadar(){}
	public void volar(){}
}
//-----------------------------
class AntiHeroe extends PersonajeDeAccion implements PuedeLuchar, PuedeNadar, PuedeVolar{
	public void nadar(){	System.out.println("nadando");} // implementacion de la interfaz
	public void volar(){System.out.println("volando");} // implementacion de la interfaz
	public void luchar(){System.out.println("pegando al heroe");} // implementacion de la interfaz
}
//-----------------------------
public class Aventura{
	static void t(PuedeLuchar x){ x.luchar(); }
	static void u(PuedeNadar x){ x.nadar(); }
	static void v(PuedeVolar x){ x.volar(); }
	static void w(PersonajeDeAccion x){ x.luchar(); }
	public static void main(String args[]){
		Heroe h = new Heroe();
		AntiHeroe a = new AntiHeroe();
		t(h); // tratandolo como un PuedeLuchar
		t(a);
		u(h); // tratandolo como un puedeNadar
		u(a);
		v(h); // como un puedevolar
		v(a);
		w(h);
		w(a);
	}

}
 
java/10.txt · Última modificación: 2008/05/13 10:00 (editor externo)
 
Excepto donde se indique lo contrario, el contenido de esta wiki se autoriza bajo la siguiente licencia:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki