Classe statique imbriquée Java

Dans ce didacticiel, vous découvrirez les classes statiques imbriquées à l'aide d'exemples. Vous découvrirez également en quoi les classes statiques diffèrent des classes internes.

Comme appris dans les tutoriels 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é staticpour 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ées Mammal et Reptile dans une classe Animal.

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 statique Mammal, 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 eat () emplacement: 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 classe Animal.

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

C'est parce que mammifère est un objet d'une classe statique et que 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 premier 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(); ) ) 

Production

 Main.java:1: erreur: modificateur statique non autorisé ici classe statique Animal (1 erreur état de sortie du compilateur 1 

Dans l'exemple ci-dessus, nous avons essayé de créer une classe statique Animal. Puisque Java n'autorise pas la classe statique de premier niveau, nous obtiendrons une erreur.

Articles intéressants...