Classe dentro de classe

gostaria de saber quando é útil ter mais de 1 classe declarada dentro de um source file!

um bom exemplo é o caso dos eventos, nos temos a interface ActionListener que, para utilizarmos os seus beneficios geralmente implementamos elas em nossas classes como por exe: public class AlgumaClasse implements ActionListener. Mas o que aconteceria se eu utilizasse mais de um evento em uma classe (o que pelomenos é normal até então na fase em que me encontro nos estudos) utilizariamos o seu método actionPerformed para todos as eventos? Mas até onde sabemos é melhor não dar tantas funções assim para o nosso método não é mesmo? para isso utilizamos as classes anihadas (uma classe dentro da outra), para facilitar.

Ex:

public class AlgumaClasse{

   private class ButtonListener implements ActionListener{

         public void actionPerformed(ActionEvent e){
            // código do evento aqui
         }
  }

}

ou seja facilitaria a leitura e o trabalho do método actionPerformed diminuiria pois para cada evento diferente que você tiver criaria uma classe interna para controlala.

Tentei explicar o melhor que pude se mais alguem tiver alguma solução ou quiser me corrigir, fiquem avontade!

Um exemplo que qprendi na faculdade foi para uma lista ligada.

public class ListaLigada{

	class NoLista{
		public NoLista proximo;
		public Object dado;
	}

	private NoLista primeiro;
	
	//Metodos da lista ligada

}

Como essa classe NoLista é bem especifica para esta lista ligada, faz sentido deixa-la visivel somente somente a ListaLigada.

É útil quando você for utilizar a classe interna somente dentro da classe onde ela está localizada e protege-la contra seu uso direto.

É útil quando se tem uma hierarquia de interfaces paralela à uma hierarquia de implementações. Um exemplo é a classe ListItr que reside dentro do AbstractList ; ListItr foi feito para ser utilizado somente com implementações de Lists, ou seja, a dependência/acoplamento e coesão entre essas duas classes é muito alta.

O que acabamos utilizando no final é um Iterator e um List.

[quote=Bruno Laturner]É útil quando você for utilizar a classe interna somente dentro da classe onde ela está localizada e protege-la contra seu uso direto.

É útil quando se tem uma hierarquia de interfaces paralela à uma hierarquia de implementações. Um exemplo é a classe ListItr que reside dentro do AbstractList ; ListItr foi feito para ser utilizado somente com implementações de Lists, ou seja, a dependência/acoplamento e coesão entre essas duas classes é muito alta.

O que acabamos utilizando no final é um Iterator e um List.[/quote]

saquei!

valeu a todos pelas dicas… sou novo no fórum ( e em java) e já notei que o pessoal esta disposto a ajudar…