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

Clase estática anidada de Java

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. Estas clases se conocen como clases anidadas. En Java, las clases anidadas son de dos tipos:

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

En este tutorial, aprenderemos acerca de las clases estáticas anidadas.


Clase estática anidada de Java

Usamos la palabra clave static para 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

I am a reptile.
I am a mammal.

En el programa anterior, tenemos dos clases anidadas Mammal y Reptil 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 usado

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 cual 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

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: cannot find symbol
    mammal.eat();
          ^
  symbol:   method eat()
  location: variable mammal of type Mammal
1 error
compiler exit status 1

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

Ahora, si intentamos acceder a eat() usando 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 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 tratamos de hacer que una clase de nivel superior sea estática.

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: modifier static not allowed here
static class Animal {
       ^
1 error
compiler exit status 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.


Java

  1. Palabra clave estática de C#
  2. Clase anidada de C#
  3. Palabra clave final de Java
  4. Operador de instancia de Java
  5. Clase interna y anidada de Java
  6. Clase anónima de Java
  7. Clase única de Java
  8. Reflexión Java
  9. Clase Java ObjectOutputStream
  10. Genéricos de Java
  11. Clase de archivo Java