Clases internas

  • Una clase interna “regular” se declara dentro de las llaves de otra clase, pero fuera de cualquier método u otro bloque de código.
  • Una clase interna puede poseer cualquier modificador.
  • Una instancia de una clase interna comparte una relación especial con una instancia de la clase externa. Esta relación brinda a la clase interna acceso a todos los miembros de la clase externa, incluidos los que son privados.
  • Para instanciar una clase interna, se debe poseer una referencia de la clase externa.
  • Dentro de la clase externa, se puede instanciar la clase interna de la siguiente manera: MyInner mi = new MyInner();
  • Para el código fuera de la clase externa, se puede instanciar la clase interna solo utilizando ambos nombres (de la clase externa e interna):

MyOuter mo = new MyOuter();

MyOuter.MyInner mi = mo.new MyOuter();

  • Para el código dentro de una clase interna, la palabra clave this guarda una referencia a la instancia de la clase interna. Para hacer referencia a la instancia de la clase externa, se debe utilizar la siguiente sintaxis: MyOuter.this;

 

Clases internas locales

  • Una clase interna local es definida dentro de un método de la clase externa.
  • Una clase interna local no puede utilizar variables declaradas dentro del método (incluyendo parámetros) salvo que esas variables sean finales.
  • Los únicos modificadores que aplican a una clase interna local son abstract y final.

 

Clases internas anónimas

  • Una clase interna anónima no tiene nombre, y debe ser una subclase o una implementación de una interface.
  • Una clase interna anónima siempre se crea como parte de una declaración, no se debe olvidar cerrar la declaración después de la definición de la clase. Esta es una sintaxis rara de Java una llave seguida de un punto y coma.
  • A causa del polimorfismo, los únicos métodos que se pueden invocar de una clase interna anónima son los métodos pertenecientes al supertipo o interface que implementa.
  • Una clase interna anónima puede extender de una clase o implementar solo una interface.

 

Clases anidadas (clases internas estáticas)

  • Las clases anidadas son clases internas marcadas con el identificador static.
  • Una clase anidada no es una clase interna, es una clase común dentro de otra.
  • Como la clase anidada es estática, esta no comparte ninguna relación con la instancia de la clase externa. De hecho, no se necesita una instancia de la clase externa para instanciar una clase anidada.
  • Para instanciar una clase anidada se necesitan utilizar ambos nombres de las clases (la externa y la anidada):

BigOuter.Nested n = new BigOuter.Nested();

  • Una clase anidada no puede acceder a los miembros no estáticos de la clase externa, ya que no posee una referencia implícita a ella.
Advertisements

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

CERRAR

Pin It on Pinterest

Share This

Compártelo

¡Comparte este artículo con tus amigos!