Breve análisis de las clases internas.

                                                    Clase interior

Definición de clase interna: en Java, se permite definir una clase dentro de una clase. Dicha clase se llama clase interna y también se llama clase anidada. La clase en la que esta clase interna se llama clase externa.

Categoría: método de clase interna estática miembro de clase interna clase interna clase interna anónima

Puntos a tener en cuenta al crear objetos de clases internas:

Primero: los objetos se pueden crear directamente dentro de la clase externa.

Método: interno s = nuevo interno ();

   Segundo: no puede crear objetos directamente fuera de la clase externa, debe usar el nombre de clase de la clase externa para determinar.

Método: suponga que A es una clase externa y B es una clase interna

AB b = newA (). New B ();

   Algunas características de las clases internas:

Primero: la clase interna sigue siendo una clase independiente. Después de la compilación, la clase interna se compilará en un archivo .class independiente, pero el nombre de la clase externa y el símbolo $ están al frente.

Segundo: no se puede acceder a las clases internas de manera ordinaria. La clase interna es un miembro de la clase externa, por lo que la clase interna puede acceder libremente a las variables miembro de la clase externa, ya sea privada o no.

Tercero: los miembros de la clase interna pueden acceder directamente a los miembros de la clase externa (incluidos los miembros privados).

Cuarto: mejor encapsulación que la categoría.

La atención se centra en las clases internas anónimas.

   La clase interna anónima debe seguir a la nueva y usarla para implementar implícitamente una interfaz o una clase sin un nombre de clase. Según el polimorfismo, usamos su nombre de clase padre. Debido a que las clases internas anónimas pertenecen a las clases locales, todas las restricciones a las clases locales surten efecto. Una clase interna anónima es la única clase sin un constructor. Cuando se compila una clase interna anónima, el sistema nombra automáticamente Out $ 1.class. Si el tipo de un objeto en tiempo de compilación es una interfaz, entonces el tipo que ejecuta es la clase que implementa la interfaz. (Involucra polimorfismo, rotación, combinación, herencia y ciertos métodos de organización)

   Características de las clases internas anónimas:

   Primero: la única clase sin constructor.

   Segundo: no hay configuraciones de permisos como privatepublic protected static

   Tercero: solo se pueden instanciar instancias de clases internas anónimas.

   Cuarto: no se pueden definir clases sin métodos estáticos.

Ventajas de las clases internas:

El código es ordenado, compacto y simplificado. Puede usar directamente la interfaz o clase, por lo que no necesita agregar otras clases o interfaces, simplemente cambie a usar la clase o interfaz existente.

Desventajas: mala legibilidad.

           Instanciación

Código de demostración:

paquete com.yc.bean;

 

clase pública exterior {

   private int num = 4; // Definir variables miembro

 

   prueba de vacío público () {

      Interior interno = nuevo Interior ();

      interior .show ();

   }

 

   // El siguiente código define una clase interna miembro

   clase interior {

      show nulo () {

        // Acceda a las variables miembro de la clase externa en el método de la clase interna del miembro

        System. Out .println ( " Acceso a miembros privados de clases externas \ t" + "num =" + ++ num );

      }

   }

}

paquete com.yc.bean;

 

Ejemplo de clase pública {

   public static void main (String [] args ) {

      Outer.Inner inner = new Outer (). New Inner (); // Crear objeto de clase interna

      inner .show (); // Método de prueba de llamada ()

   }

  

}

            Resultados de la prueba muestran

Acceso a miembros privados de clases externas num = 5

paquete com.yc.bean;

 

// La clase interna es equivalente al atributo de la clase externa. La generación del objeto de clase interna depende del objeto de clase externa. Mientras el atributo pueda tener modificadores, puede modificar la clase interna. 

// Las clases internas también generarán archivos de clase durante la compilación . Llamado así: nombre de clase externa $ nombre de clase interna.

clase pública Myclass {

   Myclass pública () {

      System. Out .println ( " Clase externa ............" );

   }

 

   clase M {

      public M () {

        System. Out .println ( " Clase interna ........." );

      }

   }

 

   public static void main (String [] args ) {

 

      Myclass my = new Myclass (); // Declaración de clase externa

      Myclass.M m = my . New M (); // Declaración de clase interna

   }

}

           Resultados de la prueba muestran

        Clase exterior ...

Clase interna ...

 

 

                   

 

 

Publicado 24 artículos originales · elogiado 36 · 20,000+ visitas

Supongo que te gusta

Origin blog.csdn.net/tanjunchen/article/details/51429189
Recomendado
Clasificación