Clase estática anidada de Java

En este tutorial, aprenderá sobre la clase estática anidada con la ayuda de ejemplos. También aprenderá en qué se diferencian las clases estáticas de las clases internas.

Como aprendimos en tutoriales anteriores, podemos tener una clase dentro de otra clase en Java. Estas clases se conocen como clases anidadas. En Java, las clases anidadas son de dos tipos:

  • Clase no estática anidada (clase interna)
  • Clase estática anidada.

Ya hemos discutido las clases internas en el tutorial anterior. Visite Java Nested Class si desea obtener más información sobre las clases internas.

En este tutorial, aprenderemos sobre clases estáticas anidadas.

Clase estática anidada de Java

Usamos la palabra clave staticpara hacer que nuestra clase anidada sea estática.

Nota: En Java, solo las clases anidadas pueden ser estáticas.

Al igual que las clases normales, las clases anidadas estáticas pueden incluir campos y métodos tanto estáticos como no estáticos. Por ejemplo,

 Class Animal ( static class Mammal ( // static and non-static members of Mammal ) // members of Animal ) 

Las clases anidadas estáticas están asociadas con la clase externa.

Para acceder a la clase anidada estática, no necesitamos objetos de la clase externa.

Ejemplo: clase anidada estática

 class Animal ( // inner class class Reptile ( public void displayInfo() ( System.out.println("I am a reptile."); ) ) // static class static class Mammal ( public void displayInfo() ( System.out.println("I am a mammal."); ) ) ) class Main ( public static void main(String() args) ( // object creation of the outer class Animal animal = new Animal(); // object creation of the non-static class Animal.Reptile reptile = animal.new Reptile(); reptile.displayInfo(); // object creation of the static nested class Animal.Mammal mammal = new Animal.Mammal(); mammal.displayInfo(); ) ) 

Salida

Soy un reptil Soy un mamifero

En el programa anterior, tenemos dos clases anidadas Mammal y Reptile dentro de una clase Animal.

Para crear un objeto de la clase Reptile no estática, hemos utilizado

 Animal.Reptile reptile = animal.new Reptile() 

Para crear un objeto de la clase estática Mammal, hemos utilizado

 Animal.Mammal mammal = new Animal.Mammal() 

Acceso a miembros de la clase externa

En Java, las clases anidadas estáticas están asociadas con la clase externa. Esta es la razón por la que las clases anidadas estáticas solo pueden acceder a los miembros de la clase (campos y métodos estáticos) de la clase externa.

Veamos qué pasará si intentamos acceder a campos y métodos no estáticos de la clase externa.

Ejemplo: acceder a miembros no estáticos

 class Animal ( static class Mammal ( public void displayInfo() ( System.out.println("I am a mammal."); ) ) class Reptile ( public void displayInfo() ( System.out.println("I am a reptile."); ) ) public void eat() ( System.out.println("I eat food."); ) ) class Main ( public static void main(String() args) ( Animal animal = new Animal(); Animal.Reptile reptile = animal.new Reptile(); reptile.displayInfo(); Animal.Mammal mammal = new Animal.Mammal(); mammal.displayInfo(); mammal.eat(); ) ) 

Salida

Main.java:28: error: no se puede encontrar el símbolo mamífero.eat (); símbolo: método eat () ubicación: variable mamífero de tipo Mamífero 1 error estado de salida del compilador 1

En el ejemplo anterior, hemos creado un método no estático eat()dentro de la clase Animal.

Ahora, si intentamos acceder eat()utilizando el objeto mamífero, el compilador muestra un error.

Es porque mamífero es un objeto de una clase estática y no podemos acceder a métodos no estáticos de clases estáticas.

Clase estática de nivel superior

Como se mencionó anteriormente, solo las clases anidadas pueden ser estáticas. No podemos tener clases estáticas de nivel superior.

Veamos qué pasará si intentamos hacer estática una clase de nivel superior.

 static class Animal ( public static void displayInfo() ( System.out.println("I am an animal"); ) ) class Main ( public static void main(String() args) ( Animal.displayInfo(); ) ) 

Salida

 Main.java:1: error: modificador static no permitido aquí static class Animal (1 error estado de salida del compilador 1 

En el ejemplo anterior, hemos intentado crear una clase estática Animal. Dado que Java no permite la clase estática de nivel superior, obtendremos un error.

Articulos interesantes...