Sunteți pe pagina 1din 5

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”.


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.
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.
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.
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. }

S-ar putea să vă placă și