English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
En este tutorial, aprenderás sobre las clases estáticas anidadas con ejemplos. También conocerás la diferencia entre las clases estáticas y las internas.
Como se explicó en el tutorial anterior, podemos tener una clase dentro de otra clase en Java. Esta clase se llama clase anidada. En Java, las clases anidadas tienen dos tipos:
Clase no estática anidada (clase interna)
clase estática anidada.
En el tutorial anterior, ya discutimos sobre las clases internas. Si quieres saber más sobre las clases internas, visitaClase anidada de Java.
En este tutorial, aprenderemos sobre las clases estáticas anidadas.
Usamos la palabra clave static para hacer que nuestras clases anidadas sean estáticas.
Nota:En Java, solo se permite que las clases anidadas sean estáticas.
Al igual que las clases convencionales, las clases anidadas pueden contener tanto campos estáticos como no estáticos y métodos. Por ejemplo,
Clase Animal { static class Mammal { // Miembros estáticos y no estáticos de la clase Mammal } // Miembro de la clase Animal }
La clase anidada estática está asociada con la clase externa.
No necesitamos un objeto de la clase externa para acceder a la clase anidada estática.
class Animal { //Clase interna class Reptile { public void displayInfo() { System.out.println("Soy un reptil."); } } //Clase estática static class Mammal { public void displayInfo() { System.out.println("Soy un mamífero."); } } } class Main { public static void main(String[] args) { //Creación de objetos de la clase externa Animal animal = new Animal(); //Creación de objetos de clase no estática Animal.Reptile reptile = animal.new Reptile(); reptile.displayInfo(); //Creación de objetos de clase anidada estática Animal.Mammal mammal = new Animal.Mammal(); mammal.displayInfo(); } }
Resultado de la salida
Soy un reptil. Soy un mamífero.
En el programa anterior, tenemos dos clases anidadas Mammal y Reptile dentro de la clase Animal.
Para crear un objeto de la clase no estática Reptile, usamos
Animal.Reptile reptile = animal.new Reptile()
Para crear un objeto de la clase estática Mammal, usamos
Animal.Mammal mammal = new Animal.Mammal()
En Java, las clases anidadas estáticas están asociadas con la clase externa. Por eso las clases anidadas estáticas solo pueden acceder a los miembros de la clase externa (campos y métodos estáticos).
Veamos qué ocurre si intentamos acceder a los campos y métodos no estáticos de una clase externa.
class Animal { static class Mammal { public void displayInfo() { System.out.println("Soy un mamífero."); } } class Reptile { public void displayInfo() { System.out.println("Soy un reptil."); } } public void eat() { System.out.println("Yo como comida."); } } 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(); } }
Resultado de la salida
Main.java:28: error: no se puede encontrar el símbolo mammal.eat(); ^ symbol: método eat() location: variable mammal de tipo Mammal 1 error estado de salida del compilador 1
En el ejemplo anterior, creamos un método no estático eat() en la clase Animal.
Ahora, si intentamos acceder a eat() usando el objeto mammal, el compilador mostrará un error.
Esto se debe a que mammal es un objeto de clase estática, por lo que no podemos acceder a métodos no estáticos desde la clase estática.
Como se mencionó anteriormente, solo las clases anidadas pueden ser estáticas. No podemos tener clases de nivel superior estáticas.
Veamos qué sucede si intentamos hacer que una clase de nivel superior sea estática.
static class Animal { public static void displayInfo() { System.out.println("Soy un animal"); } } class Main { public static void main(String[] args) { Animal.displayInfo(); } }
Resultado de la salida
Main.java:1: error: el modificador static no está permitido aquí static class Animal { ^ 1 error estado de salida del compilador 1
En el ejemplo anterior, intentamos crear una clase estática Animal. Debido a que Java no permite el uso de clases estáticas de nivel superior, se producirá un error.