Através de estudos anteriores, já sabemos que uma classe pode ter dois membros importantes: variáveis de membro e métodos . Na verdade, uma classe também possui um tipo de membro: uma classe interna. Quando uma classe define outra classe, chamamos essa classe de classe interna , e a classe que contém a classe interna é chamada de classe externa da classe interna.
1) As variáveis-membro da classe externa da classe interna ainda são válidas na classe interna, e os métodos da classe interna também podem chamar os métodos da classe externa.
2) Variáveis e métodos de classe não podem ser declarados no corpo da classe interna. No corpo da classe externa, uma classe interna pode ser usada para declarar objetos como membros de uma classe externa.
3) Uma classe interna só pode ser usada por suas classes aninhadas externas. Outras classes não podem usar a classe interna de uma determinada classe para declarar objetos.
Como as variáveis-membro da classe externa da classe interna são válidas na classe interna, a interação entre a classe interna e a classe externa é muito conveniente.
Por exemplo:
classRedCowForm{staticStringformName;RedCowcow;//objeto de declaração de classe interna RedCowForm(){}RedCowForm(Strings){cow=newRedCow(88,66,2000);formName=s;}publicvoidshowCowMess(){cow.speak();}classRedCow {//Declaração da classe interna StringcowName=calf;intheight,weight,price;RedCow(inth,intw,intp){height=h;weight=w;price=p;}voidspeak(){System.out.println( eu sou +cowName+, altura+altura+cm, peso+peso+kg, morando em +formName);}}}publicclassMain{publicstaticvoidmain(String[]args){RedCowFormform=newRedCowForm(dotcpp farm);form.showCowMess() form. vaca.speak();}}
Os resultados da execução são os seguintes:
Eu sou um bezerro, tenho 88cm de altura e peso 66kg. Moro em uma fazenda dotcpp.
Nota : O nome do arquivo de bytecode da classe interna gerado pelo compilador Java é diferente do nome da classe comum. O formato do nome do arquivo de bytecode correspondente à classe interna é " nome da classe incorporada $ nome da classe interna ". Por exemplo: o nome do arquivo bytecode da classe interna no exemplo acima deve ser RedCowForm$RedCow.class.
As classes internas podem ser modificadas como classes internas estáticas. No entanto, as classes internas estáticas não podem operar em variáveis de membros de instância incorporadas.
Ok, todos podem experimentar no computador e digerir e absorver o conteúdo desta seção.