Clases anónimas en java

Las clases anónimas son muy similares a las clases internas locales, pero sin nombre. En las clases internas locales primero se define la clase y luego se crean uno o más objetos. En las clases anónimas se unen estos dos pasos: Como la clase no tiene nombre sólo se puede crear un único objeto, ya que las clases anónimas no pueden definir constructores.

Las clases anónimas se utilizan con mucha frecuencia en el AWT para definir clases y objetos que gestionen los eventos de los distintos componentes de la interface de usuario. No hay interfaces anónimas.

Formas de definir una clase anónima:

1. Las clases anónimas requieren una extensión de la palabra clave new. Se definen en una expresión de Java, incluida en una asignación o en la llamada a un método. Se incluye la palabra new seguida de la definición de la clase anónima, entre llaves {…}.

2. Otra forma de definirlas es mediante la palabra new seguida del nombre de la clase de la que hereda (sin extends) y la definición de la clase anónima entre llaves {…}. El nombre de la super-clase puede ir seguido de argumentos para su constructor (entre paréntesis, que con mucha frecuencia estarán vacíos pues se utilizará un constructor por defecto).

3. Una tercera forma de definirlas es con la palabra new seguida del nombre de la interface que implementa (sin implements) y la definición de la clase anónima entre llaves {…}. En este caso la clase anónima deriva de Object. El nombre de la interface va seguido por paréntesis vacíos, pues el constructor de Object no tiene argumentos.

Para las clases anónimas compiladas el compilador produce ficheros con un nombre del tipo ClaseContenedora$1.class, asignando un número correlativo a cada una de las clases anónimas.

Conviene ser muy cuidadoso respecto a los aspectos tipográficos de la definición de clases anónimas, pues al no tener nombre dichas clases suelen resultar difíciles de leer e interpretar. Se aconseja utilizar las siguientes normas tipográficas:

1. Se aconseja que la palabra new esté en la misma línea que el resto de la expresión.

2. Las llaves se abren en la misma línea que new, después del cierre del paréntesis de los argumentos del constructor.

3. El cuerpo de la clase anónima se debe sangrar o indentar respecto a las líneas anteriores de código para que resulte claramente distinguible.

4. El cierre de las llaves va seguido por el resto de la expresión en la que se ha definido la clase anónima. Esto puede servir como indicación tipográfica del cierre. Puede ser algo así como }; o });

A continuación se presenta un ejemplo de definición de clase anónima en relación con el AWT:

unObjeto.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) {

}
});

donde en negrita se señala la clase anónima, que deriva de Object e implementa la interface ActionListener.

Las clases anónimas se utilizan en lugar de clases locales para clases con muy poco código, de las que sólo hace falta un objeto. No pueden tener constructores, pero sí inicializadores static o de objeto. Además de las restricciones citadas, tienen restricciones similares a las clases locales.

Fuente: Aprenda Java como si estuviera en primero de la Universidad de Navarra