https://www.dropbox.com/s/pzw44ot0ji2metl/Lambda.zip?dl=0
De la definición anterior concluimos dos cosas la primera es que para crear una clase anónima es necesario haber definido una interfaz, una clase o una clase abstracta. La clase anónima lo que hará sera implementar la interfaz definida o sobre escribir los métodos definidos. Para ilustrar esto utilizaremos el ejemplo del JAVA Tutorial https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html.
en este ejemplo tenemos que implementar clases que cumpliendo con la interfaz Saludo sean capaces de saludar en diferentes idiomas. El paso uno sera definir la interfaz con la que vamos a trabajar:
interface Saludo<Object> {
public void saluda();
public void saludaAAlguien(String aguien);
}
Sera la interfaz saludo que tiene dos métodos. Ahora para ilustrar el método clásico la implementaremos utilizando una inner class para hacer el saludo en ingles, la inner class se ve exactamente como una clase normal de JAVA y como ventaja no necesita una interfaz predefinida para existir. La inner class se vera así
class SaludaEnIngles implements Saludo {
String name = "world";
public void saluda() {
saludaAAlguien("world");
}
public void saludaAAlguien(String someone) {
name = someone;
System.out.println("Hello " + name);
}
}
como cualquier clase mundana.
Ahora si implementaremos otros dos saludos usando inner classes uno en francés y otro en español.
El saludo en francés se vera así
Saludo frenchGreeting = new Saludo() {
String name = "tout le monde";
public void saluda() {
saludaAAlguien("tout le monde");
}
public void saludaAAlguien(String someone) {
name = someone;
System.out.println("Salut " + name);
}
};
como puedes ver no existe un nombre para la clase utiliza el mismo nombre de la interfaz. La formula de la clase anónima va así;
El tipo de dato de cualquier superclase o interfaz que vamos a implementar o a extender,
Saludo
el nombre de una variable que va a almacenar nuestra impelementación
frenchGreeting
una asignación
=
un
NEW
el nombre de la interfaz a implementar o la clase a extender como un constructor sin argumentos
Saludo()
y dos corchetes que contendrán la impelementación
{};
{};
El saludo en español se vera así
Saludo spanishGreeting = new Saludo() {
String nombre= "mundo";
public void saluda() {
saludaAAlguien("mundo");
}
public void saludaAAlguien(String alguien) {
nombre= alguien;
System.out.println("Hola, " + nombre);
}
};
Esta seria la clase finalizada, como veras una clase anónima se puede definir dentro de un método como en el caso del saludo en español o fuera del método como en el caso del saludo en francés.
public class SaludoAnonimo {
interface Saludo<Object> {
public void saluda();
public void saludaAAlguien(String aguien);
}
public void diHola(){
class SaludaEnIngles implements Saludo {
String name = "world";
public void saluda() {
saludaAAlguien("world");
}
public void saludaAAlguien(String someone) {
name = someone;
System.out.println("Hello " + name);
}
}
Saludo englishGreeting = new SaludaEnIngles();
Saludo spanishGreeting = new Saludo() {
String nombre = "mundo";
public void saluda() {
saludaAAlguien("mundo");
}
public void saludaAAlguien(String alguien) {
nombre = alguien;
System.out.println("Hola, " + nombre);
}
};
englishGreeting.saluda();
frenchGreeting.saludaAAlguien("Fred");
spanishGreeting.saluda();
}
Saludo frenchGreeting = new Saludo() {
String nombre = "tout le monde";
public void saluda() {
saludaAAlguien("tout le monde");
}
public void saludaAAlguien(String alguien) {
nombre = alguien;
System.out.println("Salut " + nombre);
}
};
public static void main(String... args) {
new SaludoAnonimo().diHola();
}
}
Otros ejemplos de clase anónima serian; una clase anónima que extiende de una clase normal
class Extiende{
public void metodo(){
System.out.println("Soy metodo padre");
}
}
Extiende extiende= new Extiende(){
public void metodo(){
System.out.println("Soy metodo hijo");
}
public void nuevo(){
System.out.println("Soy metodo nuevo");
}
};
Una clase anonima que implementa una interfaz pero que se almacena en una super interfaz
interface InterfasePadre{
public void metodoSuper();
}
interface InterfaseHija extends InterfasePadre{
public void metodoHija();
}
InterfasePadre claseImplementa= new InterfaseHija(){
@Override
public void metodoSuper() {
// TODO Auto-generated method stub
}
@Override
public void metodoHija() {
// TODO Auto-generated method stub
}
};
Como puedes ver tienen mucho para experimentar con esto de las clases anónimas. ¿Que pasa si la clase que estas extendiendo no tiene un constructor vació?, ¿que pasa si defino una clase anónima fuera de una clase? ... ¿que otros casos se te ocurren?. Escribe en los comentarios.
No se entiende nada, bro
ResponderEliminarEsta buena la info pero que el codigo este en verde fluor complica mucho la lectura de ello, te recomendaria no tenerla de ese color
ResponderEliminar