Clases Anidadas Java

5

Click here to load reader

Transcript of Clases Anidadas Java

Page 1: Clases Anidadas Java

Clases anidadas en java

Las clases anidadas contienen en su interior la definición de otra clase.son conocidad como clases anidadas (nested classes) o clases internas (outer class), sólo existen para el compilador, ya que éste las transforma en clases regulares separando la clase externa de la interna con el signo $. Cada clase interna puede heredar independientemente de una implementación. Por consiguiente, la clase interna no está limitada por el hecho de que la clase externa pueda estar ya heredando de una implementación.Hay cuatro tipos de clases internas.

1. Clases internas no estáticas.2. Clases anónimas.3. Clases internas locales a método.4. Clases internas estáticas

Clases internas no estáticas.

Tiene acceso a todas las variables y métodos de la clase que la contiene. Aqui vemos como crear una instancia de una clase interna desde un método de la clase que la contiene.

1. public class Externa { 2. void imprime() { 3. Interna min = new Interna(); 4. min.muestra(); 5. } 6. class Interna { 7. public void muestra(){ 8. System.out.println("objeto interno"); 9. } 10. } 11. public static void main (String []args) { 12. Externa test = new Externa(); 13. test.imprime(); 14. } 15. }

Se mostrará en pantalla “objeto interno”.

Page 2: Clases Anidadas Java

Para crear una instancia del objeto interno directamente debemos hacerlo de esta manera.

Externa.Interna in = ex.new Interna();

1. public class Externa { 2. { 3. } 4. class Interna { 5. public void muestra(){ 6. System.out.println("objeto interno"); 7. } 8. } 9. public static void main (String []args) { 10. Externa ex = new Externa(); 11. Externa.Interna in = ex.new Interna(); 12. in.muestra(); 13. 14. } 15. } 16. }

Se mostrará en pantalla “objeto interno”.

This dentro de la clase interna hace referencia a la instancia en ejecución de la clase interna, para hacer referencia a la instancia de la clase externa debemos utilizar la expresión Externa.this. Los modificadores de acceso que pueden tener son:final, abstract, strictfp, static, private, protected y public.

Page 3: Clases Anidadas Java

Clases internas locales a método.

Se declaran dentro de un método en el cuerpo de la clase externa y sólo puede ser instanciada dentro del metódo después de la declaración de la clase interna.

1. public class Externa { 2. void proceso() { 3. class Interna { 4. public void muestra(){ 5. System.out.println("clase local a método"); 6. } 7. } 8. Interna in = new Interna(); 9. in.muestra(); 10. } 11. public static void main (String []args) { 12. 13. Externa ex = new Externa(); 14. ex.proceso(); 15. 16. } 17. }

Se mostrar en pantalla “clase local a método”.

Una clase local a método no puede acceder a las variables locales a no ser que sean declaradas como finales.Los modificadores de acceso que pueden tener son:abstract y final.

Page 4: Clases Anidadas Java

Clases anónimas

Una clase anónima se define en la misma línea donde se crea el objeto y debe ser una subclase de otra clase o implementar una interfaz. Como la clase no tiene nombre sólo se puede crear un único objeto, ya que las clases anónimas no pueden definir constructores.

1. class Test { 2. public void imprimir(){ 3. System.out.println("Imprimir test"); 4. } 5. } 6. public class Externa { 7. Test Test2 = new Test(){//aqui se define la clase anónima 8. public void imprimir(){ 9. System.out.println("Imprimir clase anónima"); 10. } 11. };//la definición de la clase termina con ";" 12. 13. void proceso() { 14. Test2.imprimir(); 15. } 16. public static void main (String []args) { 17. 18. Externa Test2 = new Externa(); 19. Test2.proceso(); 20. 21. } 22. }

Se mostrará en pantalla “Imprimir clase anónima”.

En una instancia de clase anónima sólo se puede acceder a los métodos que herede, sobrescriba o implemente de una interfaz.

Page 5: Clases Anidadas Java

Clases internas estáticas

Las clases internas estáticas no pueden acceder a las variables y métodos no estáticos de la clase externa directamente sino a través de un objeto.

1. public class Externa { 2. static class interna{ 3. public void muestra(){ 4. System.out.println("Imprimir clase estática"); 5. } 6. } 7. } 8. class Test { 9. public static void main (String []args) { 10. 11. Externa.interna Test2 = new Externa.interna(); 12. Test2.muestra(); 13. 14. } 15. }