enrique-j
8/31/2018 - 9:10 PM

Clases Anónimas

Las clases anónimas te permiten hacer que tu código sea más conciso. Le permiten declarar y crear instancias de una clase al mismo tiempo. Son como las clases locales, excepto que no tienen un nombre. Úselos si necesita usar una clase local solo una vez.

public class HelloWorldAnonymousClasses {

interface HelloWorld {
    public void greet();
    public void greetSomeone(String someone);
}

public void sayHello() {
    
    class EnglishGreeting implements HelloWorld {
        String name = "world";
        public void greet() {
            greetSomeone("world");
        }
        public void greetSomeone(String someone) {
            name = someone;
            System.out.println("Hello " + name);
        }
    }
  
    HelloWorld englishGreeting = new EnglishGreeting();
    
    HelloWorld frenchGreeting = new HelloWorld() {
        String name = "tout le monde";
        public void greet() {
            greetSomeone("tout le monde");
        }
        public void greetSomeone(String someone) {
            name = someone;
            System.out.println("Salut " + name);
        }
    };
    
    HelloWorld spanishGreeting = new HelloWorld() {
        String name = "mundo";
        public void greet() {
            greetSomeone("mundo");
        }
        public void greetSomeone(String someone) {
            name = someone;
            System.out.println("Hola, " + name);
        }
    };
    englishGreeting.greet();
    frenchGreeting.greetSomeone("Fred");
    spanishGreeting.greet();
}

public static void main(String... args) {
    HelloWorldAnonymousClasses myApp =
        new HelloWorldAnonymousClasses();
    myApp.sayHello();
}            

}

Sintaxis de clases anónimas

Como se mencionó anteriormente, una clase anónima es una expresión. La sintaxis de una expresión de clase anónima es como la invocación de un constructor, excepto que hay una definición de clase contenida en un bloque de código.

HelloWorld frenchGreeting = new HelloWorld() { String name = "tout le monde"; public void greet() { greetSomeone("tout le monde"); } public void greetSomeone(String someone) { name = someone; System.out.println("Salut " + name); } };

La expresión de clase anónima consta de lo siguiente:

El new operador

El nombre de una interfaz para implementar o una clase para extender. En este ejemplo, la clase anónima está implementando la interfaz HelloWorld.

Paréntesis que contienen los argumentos para un constructor, al igual que una expresión de creación de instancia de clase normal. Nota : Cuando implementa una interfaz, no hay ningún constructor, por lo que utiliza un par de paréntesis vacíos, como en este ejemplo.

Un cuerpo, que es un cuerpo de declaración de clase. Más específicamente, en el cuerpo, las declaraciones de métodos están permitidas pero las declaraciones no.