A través de estudios anteriores, ya sabemos que una clase puede tener dos miembros importantes: variables miembro y métodos . De hecho, una clase también tiene un tipo de miembro: una clase interna. Cuando una clase define otra clase, llamamos a dicha clase clase interna , y la clase que contiene la clase interna se llama clase externa de la clase interna.
1) Las variables miembro de la clase externa de la clase interna siguen siendo válidas en la clase interna, y los métodos de la clase interna también pueden llamar a los métodos de la clase externa.
2) Las variables de clase y los métodos de clase no se pueden declarar en el cuerpo de clase de una clase interna. En el cuerpo de clase de una clase externa, se puede usar una clase interna para declarar objetos como miembros de una clase externa.
3) Una clase interna solo puede ser utilizada por sus clases anidadas externas. Otras clases no pueden usar la clase interna de una determinada clase para declarar objetos.
Debido a que las variables miembro de la clase externa de la clase interna son válidas en la clase interna, la interacción entre la clase interna y la clase externa es muy conveniente.
Por ejemplo:
classRedCowForm{staticStringformName;RedCowcow;//Objeto de declaración de clase interna RedCowForm(){}RedCowForm(Strings){cow=newRedCow(88,66,2000);formNa me=s;}publicvoidshowCowMess(){cow.speak();}classRedCow{//Declaración de clase interna StringcowName=calf;intheight,weight,price;RedCow(inth,intw,in tp){altura=h;peso=w;precio=p;}voidspeak(){System.out.println(Soy +nombredevaca+, altura+altura+cm, peso+peso+kg, vivo en +nombredeformulario);} }}público cclassMain{publicstaticvoidmain(String[]args){RedCowFormform=newRedCowForm(granja dotcpp);form.showCowMess();form.cow.speak();}}
Los resultados de ejecución son los siguientes:
Soy un ternero. Mido 88 cm y peso 66 kg. Vivo en una granja dotcpp.
Nota : El nombre del archivo de código de bytes de la clase interna generado por el compilador de Java es diferente del nombre de la clase ordinaria. El formato del nombre del archivo de código de bytes correspondiente a la clase interna es " nombre de clase incrustado $ nombre de clase interna ". Por ejemplo: el nombre del archivo de código de bytes de la clase interna en el ejemplo anterior debe ser RedCowForm$RedCow.class.
Las clases internas se pueden modificar como clases internas estáticas. Las clases internas estáticas son un tipo de datos estáticos en clases integradas. Los programas pueden usar clases internas estáticas en otras clases para crear objetos. Sin embargo, las clases internas estáticas no pueden operar en clases integradas.
Bien, todos pueden experimentar en la computadora y digerir y absorber el contenido de esta sección.