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