Duvida sobre Eventos

Eu estava começando a estudar sobre eventos (ActionListener e etc…), e ai surgiu uma duvida na implementação da Interface…

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Eventos extends JFrame {
	
	public Eventos() {
		super("Eventos");
		
		JButton botao = new JButton("Botão Comum");
		
		botao.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {
				System.out.println("Hello!");
			}
			
		});
		
		
		
		
		
		getContentPane().add(botao);
		
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(300, 300);
		setVisible(true);
		
	}
	
	public static void main(String[] args) {
		
		new Eventos();

	}

}

Então…nessa parte do código, esta o evento, só que não foi necessário criar nenhuma classe interna, ou implementar nenhuma interface!

JButton botao = new JButton("Botão Comum");

botao.addActionListener(new ActionListener() {

    public void actionPerformed(ActionEvent e) {

        System.out.println("Hello!");

    }

});

Ele vai ter a mesma função se eu implementa-se a interface e/ou cria-se uma classe interna
Só que eu não sei se esta certo fazer isso, não tem algum problema ou prejuízo ???

Como assim não implementou uma interface. O que vc acha que ActionListener é ?
Vc está usando uma instancia anónima de ActionListener usando uma inner class (classe aninhada)

Do jeito que está ali é o jeito padrão. É claro que vc pode implementa aquela interface em uma classe normal e depois dar um new ali, mas isso não é necessário.
AS inner classes foram criadas exatamente para isto, então aproveite. ( No java 8 poderá subsituti-las por lambdas para ficar mais limpo)

Problema não há…na verdade o que você está fazendo é criando uma classe interna anônima. Funciona da mesma maneira que se você tivesse criado uma classe interna comum ou uma classe externa. Porém, neste caso, o seu método actionPerformed vai escutar o evento somente desse botão. Você não poderá usar esse método para nenhum outro componente. Acredito que vale pensar também na legibilidade do código. Eu tenho a preferência de criar uma classe separadamente. Acho que a visualização fica melhor. Mas é uma preferência minha.

De fato, do meu ponto de vista eu prefiro criar classes anônimas em vez de classes separadas, até porque posso usar variáveis finais locais e de instância da classe onde defino o listener, enquanto que em uma classe separada eu preciso passar essas variáveis finais locais e de instância explicitamente.