Pessoal

"Inner classes" e "anonymous inner classes" são uma dúvida freqüente entre os
novatos em Java.
É de fato um aspecto curioso de Java e que merece um estudo cauteloso.

Inner classes são classes declaradas dentro de outra classe. Anonymous inner
classes são classes declaradas dentro de outra classe sem nome !!
Vejamos o exemplo:

public class PrimeiraClasse {
...
    public Teste getTeste() {
        ...
        return new Teste() {
            public void printTeste() {
                System.out.println("Sobreescrevendo método printTeste da classe
Teste de uma inner class");
            }
        }
    }
}

Explicando a confusão acima. Uma classe "normal" PrimeiraClasse possui um método
chamado getTeste(). Esse método retorna um objeto da classe Teste. O que é feito
aqui é que no retorno de getTeste(), o return cria um objeto de uma classe que
não é Teste, mas extende a classe Teste. Esse objeto é de uma classe que não tem
nome(!). No meu exemplo, essa classe Teste extendida, sobrescreve ou implementa o
método printTeste().

Isso gera dois arquivos: PrimeiraClasse.class e PrimeiraClasse$1.class
Além disso, podemos ter static inner classes. A diferença é que em static inner
classes, o javac não cria uma referência à classe pai. Isso é útil por exemplo
quando vamos serializar um obejto e o enviarmos pela rede. Se mantermos uma
refeência a classe pai, estaremos serailizando toda a classe pai e outra tralhas.
:)

Espero que tenha resolvido o mistério das classes$n...

Rodrigo

Tamer Americo wrote:

> me intrometendo no assunto, isto acontece comigo somente quando compilo
> classes que utilizam swing. Geralmente sao gerados uns 3 arquivos class$n.
>
> Eu nao sei o que significa esta innerClass. poderiam me explicar ??
>
> At 10:29 29/02/2000 -0300, you wrote:
> >Rodrigo B Mazzilli wrote:
> >>
> >> Olá...
> >>
> >> O seu código deve ter em algum ponto a declaração de uma inner class. A
> >> sintaxe padrão Java para inner classes é
> >> classeprincipal$InnerClass.class
> >>
> >> Rodrigo
> >
> >Tudo bem, mas pelo o que eu percebi, quando ele coloca um numero, como o
> >exemplo que eu dei (classe$1.class) é pq a Inner class nao tem um nome
> >definido. No meu caso, o compilador esta tratando algo como uma inner
> >class, só que eu nao quero! O que pode ser?
> >
> >
> >
> _____________________________________________________________________________
> Tamer Americo- Conselho Federal de Medicina - CFM - [EMAIL PROTECTED]
> http://come.to/tamerico - [EMAIL PROTECTED] - ICQ#3221276 - Odigo#16141
>
> "When we are young
> Wandering the face of the earth
> Wondering what our dreams might be worth
> Learning that we're only immortal
> For a limited time"
> Dreamline - Rush
> ____________________________________________________________________________
> _
>
>     --------------------------- LISTA SOUJAVA ---------------------------
>     http://www.soujava.org.br  -  Sociedade de Usuários Java da Sucesu-SP
>     [dúvidas mais comuns: http://www.soujava.org.br/faq.htm]
>     [para sair da lista: http://www.soujava.org.br/forum/cadastrados.htm]
>     ---------------------------------------------------------------------

--
_____________________________________________________________________
Rodrigo B Mazzilli (Mr.) <[EMAIL PROTECTED]>
ICQ# 4106069
_____________________________________________________________________
To get my PGP public key, reply this message
with "get public-key" in the subject field.
---------------------------------------------------------------------
"Computers can never replace human stupidity."


    --------------------------- LISTA SOUJAVA ---------------------------
    http://www.soujava.org.br  -  Sociedade de Usuários Java da Sucesu-SP
    [dúvidas mais comuns: http://www.soujava.org.br/faq.htm]
    [para sair da lista: http://www.soujava.org.br/forum/cadastrados.htm]
    ---------------------------------------------------------------------

Responder a