Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Java

Entendiendo las clases anidadas estáticas en Java: Uso, diferencias y ejemplos

Clase anidada estática en Java

Descubre cómo funcionan las clases anidadas estáticas de Java, cómo difieren de las clases internas y cuándo usarlas con ejemplos de código prácticos.

En Java, una clase puede definirse dentro de otra clase. Estas se llaman clases anidadas y vienen en dos formas:

Mientras que las clases internas se cubrieron en nuestro tutorial previo, este artículo se enfoca en las clases anidadas estáticas.


Clase anidada estática en Java

Para declarar una clase anidada como estática, simplemente antepón la palabra clave static:

class Animal { static class Mamifero { // miembros estáticos y no‑estáticos de Mamifero } // miembros de Animal } 
Nota: Solo las clases anidadas pueden declararse static; las clases de nivel superior no.

Como cualquier clase, una clase anidada estática puede contener tanto miembros estáticos como de instancia.

Por ser un miembro estático de su clase externa, puedes acceder a una clase anidada estática sin crear una instancia de la clase externa.


Ejemplo: Clase anidada estática

class Animal { // clase interna class Reptil { public void mostrarInfo() { System.out.println("Soy un reptil."); } } // clase anidada estática static class Mamifero { public void mostrarInfo() { System.out.println("Soy un mamífero."); } } } class Main { public static void main(String[] args) { // crear instancia de clase externa Animal animal = new Animal(); // crear instancia de clase interna no‑estática Animal.Reptil reptil = animal.new Reptil(); reptil.mostrarInfo(); // crear instancia de clase anidada estática Animal.Mamifero mamifero = new Animal.Mamifero(); mamifero.mostrarInfo(); } } 

Salida

Soy un reptil. Soy un mamífero. 

En el código anterior, Mamifero es una clase anidada estática mientras que Reptil es una clase interna.

Observa la diferente sintaxis de instanciación:


Accediendo a miembros de la clase externa

Como una clase anidada estática está asociada con su clase externa, solo puede acceder a miembros estáticos de la clase externa. Intentos de referenciar miembros de instancia resultarán en error de compilación.

Ejemplo: Intentando llamar a un método no‑estático

class Animal { static class Mamifero { public void mostrarInfo() { System.out.println("Soy un mamífero."); } } class Reptil { public void mostrarInfo() { System.out.println("Soy un reptil."); } } public void comer() { System.out.println("Como comida."); } } class Main { public static void main(String[] args) { Animal animal = new Animal(); Animal.Reptil reptil = animal.new Reptil(); reptil.mostrarInfo(); Animal.Mamifero mamifero = new Animal.Mamifero(); mamifero.mostrarInfo(); mamifero.comer(); // ❌ Error en tiempo de compilación } } 

Salida

Main.java:28: error: cannot find symbol mamifero.comer(); ^ symbol: method comer() location: variable mamifero of type Mamifero 1 error compiler exit status 1 

El error ocurre porque mamifero es una instancia de una clase anidada estática y no puede invocar el método no‑estático comer() de Animal.


¿Clase de nivel superior estática?

Java prohíbe clases de nivel superior estáticas. Solo las clases anidadas pueden declararse static. El siguiente código demuestra el error del compilador:

static class Animal { public static void mostrarInfo() { System.out.println("Soy un animal"); } } class Main { public static void main(String[] args) { Animal.mostrarInfo(); } } 

Salida

Main.java:1: error: modifier static not allowed here static class Animal { ^ 1 error compiler exit status 1 

Esto confirma que solo las clases anidadas pueden ser static.

Java

  1. Palabra clave static en C#: Dominando variables, métodos y clases estáticas
  2. Entendiendo clases anidadas en C#: Definición, uso y herencia
  3. Palabra clave final en Java: Variables, métodos y clases
  4. Operador instanceof en Java: Guía completa
  5. Dominando clases anidadas e internas en Java: Tipos, ejemplos y mejores prácticas
  6. Dominando las clases internas anónimas en Java: Definición, sintaxis y ejemplos prácticos
  7. Patrón Singleton en Java explicado: Cómo implementarlo y usarlo de forma segura
  8. Dominando la Reflexión en Java: Inspeccionando clases, métodos y campos en tiempo de ejecución
  9. Dominando ObjectOutputStream de Java: Serialización, Métodos y Ejemplos Prácticos
  10. Dominando Java Generics: Construyendo Código Reutilizable y Type-Safe
  11. Dominando las operaciones de archivos en Java con java.io: creación, lectura, escritura y eliminación