Classe statique imbriquée Java
Classe statique imbriquée Java
Dans ce didacticiel, vous découvrirez les classes statiques imbriquées à l'aide d'exemples. Vous apprendrez également en quoi les classes statiques diffèrent des classes internes.
Comme appris dans les tutoriels précédents, nous pouvons avoir une classe à l'intérieur d'une autre classe en Java. Ces classes sont appelées classes imbriquées. En Java, les classes imbriquées sont de deux types :
- Classe imbriquée non statique (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 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 des 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();
}
}
Sortie
I am a reptile. I am a mammal.
Dans le programme ci-dessus, nous avons deux classes imbriquées Mammal et reptile à l'intérieur d'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éder 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éder 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();
}
}
Sortie
Main.java:28: error: cannot find symbol mammal.eat(); ^ symbol: method eat() location: variable mammal of type Mammal 1 error compiler exit status 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 à eat()
en utilisant l'objet mammifère , le compilateur affiche une erreur.
C'est parce que mammifère est un objet d'une classe statique et nous ne pouvons pas accéder aux méthodes non statiques des classes statiques.
Classe statique de niveau supérieur
Comme mentionné ci-dessus, seules les classes imbriquées peuvent être statiques. Nous ne pouvons pas avoir de classes statiques de niveau supérieur.
Voyons ce qui se passera si nous essayons de rendre une classe de niveau supérieur statique.
static class Animal {
public static void displayInfo() {
System.out.println("I am an animal");
}
}
class Main {
public static void main(String[] args) {
Animal.displayInfo();
}
}
Sortie
Main.java:1: error: modifier static not allowed here static class Animal { ^ 1 error compiler exit status 1
Dans l'exemple ci-dessus, nous avons essayé de créer une classe statique Animal . Étant donné que Java n'autorise pas les classes statiques de niveau supérieur, nous obtiendrons une erreur.
Java