Hola:
Efectivamente, no es posible ActionListener ac = new ActionListener(); ni la otra variante que pones, pero sí es posible
es una forma que permite java de implementar una interfaz sobre la marcha, sin necesidad de tener que crear explícitamente una clase. Inmediatamente despues de new ActionListener() debes abrir una llave {, implementar TODOS los métodos de la interfaz o los métodos abstractos si en vez de interfaz fuera una clase abstracta, y finalmente cerrar la }
Puedes hacerlo también sin necesidad de guardarla en una variable, puedes hacerlo directamente como parámetro de un método que es la segunda opción que muestras
Código Java:
Ver originaladdActionListener(new ActionLIstener() {
.....
}
});
Este tipo de clases así definidas se llaman clases anónimas, puesto que se crean sobre la marcha y no tienen nombre. En los .class generados, si haces esto por ejemplo en un fichero Ventana.java, verás Ventana.class y Ventana$1.class, donde Ventana.class es la clase compilada de tu fichero Ventana.java y Ventana$1.class sería una de esas clases anónimas definidas dentro de Ventana.java
Se bueno.