Breaking

Post Top Ad

Your Ad Spot

jueves, 19 de diciembre de 2019

Clase estática anidada de Java

En este tutorial, aprenderá sobre la clase estática anidada con la ayuda de ejemplos. También aprenderá cómo las clases estáticas difieren de las clases internas.
Como aprendimos en tutoriales anteriores, podemos tener una clase dentro de otra clase en Java. Dichas 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 aprender sobre las clases internas.
En este tutorial, aprenderemos sobre las 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 regulares, las clases anidadas estáticas pueden incluir campos y métodos estáticos y no estáticos. Por ejemplo,
  1. Class Animal {
  2. static class Mammal {
  3. // static and non-static members of Mammal
  4. }
  5. // members of Animal
  6. }
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

  1. class Animal {
  2. // inner class
  3. class Reptile {
  4. public void displayInfo() {
  5. System.out.println("I am a reptile.");
  6. }
  7. }
  8. // static class
  9. static class Mammal {
  10. public void displayInfo() {
  11. System.out.println("I am a mammal.");
  12. }
  13. }
  14. }
  15. class Main {
  16. public static void main(String[] args) {
  17. // object creation of the outer class
  18. Animal animal = new Animal();
  19. // object creation of the non-static class
  20. Animal.Reptile reptile = animal.new Reptile();
  21. reptile.displayInfo();
  22. // object creation of the static nested class
  23. Animal.Mammal mammal = new Animal.Mammal();
  24. mammal.displayInfo();
  25. }
  26. }
Salida
Soy un reptil
Soy un mamifero
En el programa anterior, tenemos dos clases anidadas Mamífero y Reptil dentro de una clase Animal .
Para crear un objeto de la clase no estática Reptil, hemos utilizado
  1. Animal.Reptile reptile = animal.new Reptile()
Para crear un objeto de la clase estática Mammal , hemos utilizado
  1. Animal.Mammal mammal = new Animal.Mammal()

Acceso a miembros de clase externa

En Java, las clases anidadas estáticas están asociadas con la clase externa. Es por eso 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é sucederá si intentamos acceder a campos y métodos no estáticos de la clase externa.

Ejemplo: acceso a miembros no estáticos

  1. class Animal {
  2. static class Mammal {
  3. public void displayInfo() {
  4. System.out.println("I am a mammal.");
  5. }
  6. }
  7. class Reptile {
  8. public void displayInfo() {
  9. System.out.println("I am a reptile.");
  10. }
  11. }
  12. public void eat() {
  13. System.out.println("I eat food.");
  14. }
  15. }
  16. class Main {
  17. public static void main(String[] args) {
  18. Animal animal = new Animal();
  19. Animal.Reptile reptile = animal.new Reptile();
  20. reptile.displayInfo();
  21. Animal.Mammal mammal = new Animal.Mammal();
  22. mammal.displayInfo();
  23. mammal.eat();
  24. }
  25. }
Salida
Main.java:28: error: no se puede encontrar el símbolo
    mamífero.eat ();
          ^
  símbolo: método eat ()
  ubicación: mamífero variable 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()usando el objeto mamífero , el compilador muestra un error.
Es porque el mamífero es un objeto de una clase estática y no podemos acceder a métodos no estáticos desde 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é sucederá si intentamos hacer que una clase de nivel superior sea estática.
  1. static class Animal {
  2. public static void displayInfo() {
  3. System.out.println("I am an animal");
  4. }
  5. }
  6. class Main {
  7. public static void main(String[] args) {
  8. Animal.displayInfo();
  9. }
  10. }
Salida
Main.java:1: error: modificador estático no permitido aquí
clase estática Animal {
       ^
1 error
estado de salida del compilador 1
En el ejemplo anterior, hemos intentado crear una clase estática Animal . Como Java no permite clases estáticas de nivel superior, obtendremos un error.

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Post Top Ad

Your Ad Spot

Páginas