Nested class vs implements ActionListener

¿Hay algún beneficio o inconveniente para crear una clase anidada que implemente ActionListener:

public class Foo{
    Foo(){
        something.addActionListener(new ButtonListener());
    }
    //...
    private class ButtonListener implements ActionListener{
        public void actionPerformed(ActionEvent e){
            //...
        }
    }
}

versus implementando ActionListener en la propia clase principal:

public class Foo implements ActionListener{
    Foo(){
        something.addActionListener(this);
    }
    //...
    public void actionPerformed(ActionEvent e){
        //...
    }
}

He visto ambos ejemplos con bastante frecuencia, y solo quiero saber si hay una 'mejor práctica'.

Respuestas a la pregunta(4)

Su respuesta a la pregunta