Descripción general
Recientemente aprendiendo Python y descubrió que Python apoya más herencia, lo que me recuerda a este mecanismo implementado por la clase interna. Este artículo no se trata de cómo lograr una mayor herencia a través de la clase interna, sino para resumir los tipos y los métodos de uso de la clase interna.
La clase interna de Java se divide en:
La clase interna se usa en el código fuente de Android en grandes cantidades.
A continuación, presente estas clases internas respectivamente.
Clase interna no estática
Cuando una clase es un miembro no estático de otra clase, esta clase es una clase interna no estática.
El código de ejemplo de creación de una clase interna no estática es el siguiente:
clase OutClass {Class InnClass {}}
Cuando compilamos Javac, descubrimos que se generaron dos archivos .class: OutClass.Class y OutClass $ InnerClass.class. Como se muestra en la figura a continuación:
Clases internas del método no estático de la clase externa
Es fácil acceder a la clase interna en la clase externa. El código de ejemplo es el siguiente:
Clase pública OutClass {private static int a = 0; .MakeInner ();} clase InnClass {public void Seeouter () {System.out.println (a);Los resultados son los siguientes:
0
Clases internas del método estático de la clase externa
Es relativamente simple acceder a la clase interna en la clase externa.
OutClass.innerClass InnClass = new OutClass ().
En otras palabras, se requiere instanciar primero la clase interna no estática, y luego se usan clases internas instanciadas a través de los objetos de clase externas. El código de ejemplo es el siguiente:
Clase pública OutClass {private static int a = 0; .innerClass InnClass = new OutClass ().
Ejecutar resultados:
01
Esta referencia en la clase interna
Las clases ordinarias pueden hacer referencia a los objetos actuales con esto, así como las clases internas. Pero, ¿qué pasa si la clase interna quiere citar el objeto actual de la clase externa? Puedes usar las siguientes formas:
Nombre externo.
El código de ejemplo es el siguiente:
Clase pública OutClass {private static int a = 0; .innerClass InnClass = new OutClass (). }}}
Clase interna estática
La clase interna no estática se introduce arriba.
La clase interna estática es el papel de un miembro estático en la clase externa.
Tenga en cuenta que la clase externa no se puede modificar utilizando el modificador estático.
El código de ejemplo es el siguiente:
clase OutClass {Static Class Innclass {}}
Compile con el comando Javac, puede ver que hay dos archivos .class, como se muestra en la figura a continuación:
Clases internas de clases internas estáticas del método no estático de la clase externa
Visitar clases internas estáticas de clases externas es la misma que las clases internas no estatales en categorías externas. Sin embargo, debe tenerse en cuenta que en este momento, la clase interna estática solo puede acceder a los miembros estáticos de la clase externa, y no se puede acceder a los miembros no estatales.
El código de ejemplo es el siguiente:
Clase pública fuera de clase {private static int a = 0; OUTCLASS OCLASS = new OutClass (); println (b);}}}
Los resultados de la ejecución son los siguientes:
OutClass $ Innclass@79A3400
Clasificación interna de clases internas estáticas del método estático externo
Aviso:
Debido a que la clase interna estática es un miembro estático de la clase externa, y los miembros estáticos están unidos a la clase, no al objeto de objetos instanciados. Por lo tanto, las clases internas en el método estático de la clase externa no necesitan instanciar primero la clase externa.
El código de ejemplo es el siguiente:
Clase pública fuera de clase {private static int a = 0; OUTCLASS OCLASS = new OutClass (); esto);
Clase interna anónima
La clase interna anónima está inundando el desarrollo de aplicaciones de Android.
La clase interna anónima puede saber que esta es una clase interna que no tiene una categoría, que generalmente se usa para simplificar el código.
Creo que los estudiantes que escriben Java usan los hilos. El código de ejemplo es el siguiente:
Public class OutClass {public void testAnyMoUsClass () {Thread t = new Thread (new Runnable () {@Override public void run () {for (int i = 0; i <10; i ++) {system.out.println (i); .
Los resultados de la ejecución son los siguientes:
Otro hilo se está ejecutando ...