English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriel de base Java

Contrôle de flux Java

Java tableau

Java orienté objet (I)

Java orienté objet (II)

Java orienté objet (III)

Gestion des exceptions Java

Java List

Java Queue (file d'attente)

Java Map collection

Java Set collection

Java entrée/sortie (I/O)

Java Reader/Writer

Autres sujets Java

Classes statiques imbriquées Java

Dans ce tutoriel, vous apprendrez les classes statiques imbriquées à l'aide d'exemples. Vous découvrirez également la différence entre les classes statiques et les classes internes.

Comme mentionné dans les tutoriels précédents, nous pouvons avoir une classe dans une autre classe en Java. Une telle classe est appelée classe imbriquée. En Java, il y a deux types de classes imbriquées :

  • Classe non statique imbriquée (classe interne)

  • Classe statique imbriquée.

Dans le tutoriel précédent, nous avons déjà discuté des classes internes. Si vous souhaitez en savoir plus sur les classes internes, veuillez visiterClasse imbriquée Java.

Dans ce tutoriel, nous allons apprendre la classe statique imbriquée.

Classe statique imbriquée Java

Nous utilisons la keyword static pour rendre notre classe imbriquée statique.

Attention :En Java, seules les classes imbriquées peuvent être statiques.

Comme pour les classes conventionnelles, les classes imbriquées peuvent contenir à la fois des champs et des méthodes statiques et non statiques. Par exemple,

Classe Animal {
   static class Mammal {
      // Membres statiques et membres statiques de la classe Mammal
   }
   // Membre de la classe Animal
}

La classe imbriquée statique est associée à la classe externe.

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

Exemple : classe imbriquée statique

class Animal {
  //Classe interne
   class Reptile {
      public void displayInfo() {
        System.out.println("Je suis un reptile.");
      }
   }
  //Classe statique
   static class Mammal {
      public void displayInfo() {
        System.out.println("Je suis un mammal.");
      }
   }
}
class Main {
   public static void main(String[] args) {
      //Création d'objets de la classe externe
      Animal animal = new Animal();
      //Création d'objets de classes non statiques
      Animal.Reptile reptile = animal.new Reptile();
      reptile.displayInfo();
      //Création d'objets de classes imbriquées statiques
      Animal.Mammal mammal = new Animal.Mammal();
      mammal.displayInfo();
   }
}

Output result

Je suis un reptile.
Je suis un mammal.

Dans le programme ci-dessus, nous avons deux classes imbriquées Mammal et Reptile dans la classe Animal.

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

Animal.Reptile reptile = animal.new Reptile()

Pour créer un objet de la classe statique Mammal, nous utilisons

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 externe (champs et méthodes statiques).

Voyons ce qui se passe si nous essayons d'accéder aux champs et méthodes non statiques d'une classe externe.

Exemple : accès aux membres non statiques

class Animal {
  static class Mammal {
   public void displayInfo() {
     System.out.println("Je suis un mammal.");
   }
 }
 class Reptile {
   public void displayInfo() {
     System.out.println("Je suis un reptile.");
   }
 }
 public void eat() {
   System.out.println("Je mange de la nourriture.");
 }
}
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();
 }
}

Output result

Main.java:28: erreur: symbole introuvable
    mammal.eat();
          ^
  symbol: méthode eat()
  location: variable mammal de type Mammal
1 error
compiler exit status 1

Dans l'exemple ci-dessus, nous avons créé une méthode non statique eat() dans la classe Animal.

Maintenant, si nous essayons d'accéder à la méthode eat() en utilisant l'objet mammal, le compilateur affichera une erreur.
This is because mammal is an object of a static class, so we cannot access non-static methods from a static class.

Static top-level class

As mentioned above, only nested classes can be static. We cannot have static top-level classes.

Let's see what happens if we try to make the top-level class static.

static class Animal {
 public static void displayInfo() {
   System.out.println("I am an animal");
 }
}
class Main {
 public static void main(String[] args) {
   Animal.displayInfo();
 }
}

Output result

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

In the example above, we try to create a static class Animal. Since Java does not allow the use of static top-level classes, an error will occur.