Duvidas sobre inner classes, anonymous classes

Alguém poderia me explicar de forma resumida os principais conceitos e funcionalidades de uma inner class e de uma anonymous class. Estou estudando para a certificação de programmer, e não consegui entender claramente o real funcionamento destas classes e como seria o uso eficiente deestas classes em uma aplicação.

Alguém pode me dar uma ajudinha, ou até mesmo um material na internet, de preferencia em portugues.

Obrigado.

vou fala o pouco que eu sei sobre isso, ae alguem mais experiente pode dar uma explicação melhor…
a inner class vc define assim mais ou menos

public class Teste {
  public static void main(String args[]) {
  }
  class Teste2 {
  }
}

verifica que a class Teste é chamada a Classe TOP, e a classe Teste2 esta dentro da classe Teste, então a classe Teste2 é minha inner classe

a Vantagem dela é que a classe Teste2 pode acessar tudo da classe Teste, inclusive métodos e atributos private, coisa que em classes normais não podem acessar…

Um exemplo bem tipico de classe anonyma é quando vc usa com listener, por exemplo, ActionListener, exemplo

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

verifica que nao está sendo criado nenhum objeto para a classe ActionListener, então ela é uma classe anonyma… a vantagem eu nao sei exatamente, mas isso é usado basicamente para reduzir linhas de códigos, pois nao precisa instanciar uma classe para um objeto e etc…

espero ter ajudado