Classe statique imbriquée Java

Comme appris dans les didacticiels précédents, nous pouvons avoir une classe dans une autre classe en Java. Ces classes sont appelées classes imbriquées. En Java, les classes imbriquées sont de deux types:

  • Classe non statique imbriquée (classe interne)
  • Classe statique imbriquée.

Nous avons déjà discuté des classes internes dans le tutoriel précédent. Visitez Java Nested Class si vous souhaitez en savoir plus sur les classes internes.

Dans ce didacticiel, nous allons découvrir les classes statiques imbriquées.


Classe statique imbriquée Java

Nous utilisons le mot-clé static pour rendre notre classe imbriquée statique.

Remarque:En Java, seules les classes imbriquées sont autorisées à être statiques.

Comme les classes régulières, les classes imbriquées statiques peuvent inclure des champs et des méthodes à la fois statiques et non statiques. Par exemple,

 Class Animal {
   static class Mammal {
      // static and non-static members of Mammal
   }
   // members of Animal
} 
 

Les classes imbriquées statiques sont associées à la classe externe.

Pour accéder à la classe imbriquée statique, nous n’avons pas besoin d’objets de la classe externe.


Exemple: classe imbriquée statique

 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();

   }
}
 

Production

Je suis un reptile.
Je suis un mammifère.

Dans le programme ci-dessus, nous avons deux classes imbriquéesMammifèreetReptiledans une classeAnimal.

Pour créer un objet de la classe non statique Reptile, nous avons utilisé

 Animal.Reptile reptile = animal.new Reptile()
 

Pour créer un objet de la classe statiqueMammifère, nous avons utilisé

 Animal.Mammal mammal = new Animal.Mammal()
 

Accès aux membres de la classe externe

En Java, les classes imbriquées statiques sont associées à la classe externe. C’est pourquoi les classes imbriquées statiques ne peuvent accéder qu’aux membres de la classe (champs et méthodes statiques) de la classe externe.

Voyons ce qui se passera si nous essayons d’accéder aux champs et méthodes non statiques de la classe externe.

Exemple: accès aux membres non statiques

 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();
 }
}
 

Production

Main.java:28: erreur: impossible de trouver le symbole
    mammifère.eat ();
          ^
  symbole: méthode manger ()
  localisation: mammifère variable de type Mammifère
1 erreur
état de sortie du compilateur 1

Dans l’exemple ci-dessus, nous avons créé une méthode non statique eat() à l’intérieur de la classeAnimal.

Maintenant, si nous essayons d’accéder eat() en utilisant l’objetmammifère, le compilateur affiche une erreur.

C’est parce quemammifèreest un objet d’une classe statique et nous ne pouvons pas accéder aux méthodes non statiques à partir de classes statiques.


Classe statique de premier niveau

Comme mentionné ci-dessus, seules les classes imbriquées peuvent être statiques. Nous ne pouvons pas avoir de classes statiques de premier niveau.

Voyons ce qui se passera si nous essayons de rendre statique une classe de haut niveau.

 static class Animal {
public static void displayInfo() {
System.out.println("I am an animal");
}
}

class Main {
public static void main(String[] args) {
Animal.displayInfo();
}
}