2009-10-09 7 views
32

Soy relativamente nuevo en Java y estoy usando una nueva API. Me encontré con este método de anulación y no estoy seguro de lo que se llama:¿Qué es este tipo de método anulado llamado en Java?

public void exampleMethod() { 
    Button loginButton = new Button("login"){ 
     public void onSubmit(){ 
      //submit code here 
     } 
    }; 
} 

Por lo que entiendo, esto es reemplazar el método onSubmit de la clase Button. Nunca me he encontrado con este tipo de anulación antes. ¿Hay un nombre específico para eso? Quiero leer más sobre eso, pero no puedo encontrarlo. Todas mis búsquedas hasta ahora resultan en anulación de método regular al crear una nueva clase, que es con lo que ya estoy familiarizado.

Agradecería que alguien me señale la dirección correcta.

Gracias.

+3

Una gran pregunta ... ¡y es el tipo de cosas que es muy difícil de buscar en una referencia! +1 Afortunadamente, cuando intenté hacer la misma Q en SO, encontró su Q para mí. – LarsH

Respuesta

28

Esa es una anonymous inner class.

En el ejemplo anterior en lugar de crear un private class que se extiende Button creamos una subclase de Button y proporcionamos la implementación del método reemplazado en línea con el resto del código.

Como esta nueva clase se crea sobre la marcha no tiene nombre, de ahí anónimo. Como se define dentro de otra clase, es una clase anónima interna.

Puede ser un acceso directo muy útil, especialmente para las clases Listener, pero puede hacer que su código sea difícil de seguir si se deja llevar y las definiciones del método en línea son demasiado largas.

12

Eso es anonymous inner class. Básicamente, crea una nueva clase que deriva del especificado (Button en este caso, aunque puede usar la misma técnica para implementar interfaces) y anula los métodos apropiados. Puede contener otros métodos también, pero solo estarían disponibles dentro de esa clase.

La clase tiene acceso a variables locales finales dentro del mismo método, y si está escribiendo un método de instancia también tiene una referencia implícita a this (para que pueda llamar a otros métodos en su clase "principal").

+0

Gracias. Busqué el método interno, pero no pensé en él como una clase interna, mucho menos una clase interna anónima. Desactivado para leer sobre ellos voy! –

Cuestiones relacionadas