Java est l’un des langages de programmation les plus populaires et les plus largement utilisés dans le monde du développement logiciel. Dans cette série de guides, nous allons plonger dans l’un des concepts fondamentaux de Java : le mot-clé “super”.
En Java, “super” est un mot-clé qui permet de faire référence à la classe parente immédiate d’une classe. Il est principalement utilisé dans le contexte de l’héritage, où une classe enfant hérite des attributs et des méthodes de sa classe parente. L’utilisation de “super” permet d’accéder aux membres de la classe parente à partir de la classe enfant.
class Parent {
Parent() {
// Constructeur de la classe parente
}
}
class Child extends Parent {
Child() {
super(); // Appel du constructeur parent
// Autres instructions de construction
}
}
class Parent {
int x = 10;
void display() {
System.out.println("Parent class");
}
}
class Child extends Parent {
int x = 20;
void display() {
super.display(); // Appel de la méthode display de la classe parente
System.out.println("Child class");
System.out.println("Value of x in parent: " + super.x); // Accès à la variable x de la classe parente
System.out.println("Value of x in child: " + x); // Accès à la variable x de la classe enfant
}
}
Voici quelques⭐ exemples pratiques ⭐ d’utilisation du mot-clé “super” en Java avec du code :
Supposons que nous ayons une classe Animal
et une classe Dog
qui étend Animal
. Nous voulons que le constructeur de Dog
initialise également certaines propriétés de Animal
.
class Animal {
String species;
Animal(String species) {
this.species = species;
}
}
class Dog extends Animal {
String name;
Dog(String species, String name) {
super(species); // Appel du constructeur de la classe parente
this.name = name;
}
}
Imaginons une classe Shape
avec une méthode calculateArea()
et une classe Rectangle
qui étend Shape
. Dans Rectangle
, nous voulons également calculer l’aire mais en utilisant à la fois la hauteur et la largeur, héritées de Shape
.
class Shape {
double calculateArea() {
return 0;
}
}
class Rectangle extends Shape {
double width, height;
Rectangle(double width, double height) {
this.width = width;
this.height = height;
}
double calculateArea() {
double area = super.calculateArea(); // Appel de la méthode de la classe parente
return width * height;
}
}
Dans ce cas, supposons que la classe parente et la classe enfant aient des attributs de même nom.
class Parent {
int x = 10;
void display() {
System.out.println("Parent class");
}
}
class Child extends Parent {
int x = 20;
void display() {
super.display(); // Appel de la méthode de la classe parente
System.out.println("Child class");
System.out.println("Value of x in parent: " + super.x); // Accès à la variable x de la classe parente
System.out.println("Value of x in child: " + x); // Accès à la variable x de la classe enfant
}
}
Ces exemples démontrent comment “super” peut être utilisé pour appeler le constructeur de la classe parente. De plus, il permet d’accéder aux membres de la classe parente et de gérer les conflits de noms entre la classe parente et la classe enfant.
Voici quelques ⭐ cas particuliers ⭐ à prendre en compte lors de l’utilisation du mot-clé “super” en Java :
Si la classe parente a un constructeur par défaut (sans paramètres), et que la classe enfant n’appelle pas explicitement un constructeur parent avec super()
, le compilateur insère automatiquement un appel implicite au constructeur par défaut de la classe parente.
class Parent {
Parent() {
System.out.println("Parent default constructor");
}
}
class Child extends Parent {
Child() {
// Implicitement équivaut à super()
System.out.println("Child default constructor");
}
}
Le mot-clé “super” ne peut pas être utilisé dans une méthode statique car il fait référence à une instance de la classe parente, et les méthodes statiques n’ont pas de contexte d’instance.
class Parent {
static void staticMethod() {
// super.x; // Cela provoquerait une erreur de compilation car "super" ne peut pas être utilisé dans une méthode statique
}
}
Lors de l’utilisation de “super” dans une classe anonyme, il peut être nécessaire de qualifier “super” avec le nom de la classe parente, surtout si la classe anonyme est définie dans un contexte où il y a une autre classe parente avec le même nom.
class Parent {
void display() {
System.out.println("Parent class");
}
}
class Example {
Parent parent = new Parent() {
void display() {
Parent.super.display(); // Utilisation de "super" avec le nom de la classe parente pour éviter toute confusion
System.out.println("Anonymous class");
}
};
}
Ces cas particuliers montrent des situations où l’utilisation de “super” peut nécessiter une attention particulière pour éviter des erreurs de compilation ou des comportements inattendus.
Certaines erreurs courantes peuvent survenir lors de l’utilisation du mot-clé “super” en Java. Voici quelques-unes à éviter :
Lorsque vous étendez une classe parente et que vous écrivez un constructeur pour la classe enfant, assurez-vous d’appeler explicitement le constructeur de la classe parente en utilisant super()
comme première instruction dans le constructeur de la classe enfant. Oublier cela peut entraîner une erreur de compilation ou un comportement inattendu.
class Parent {
Parent() {
System.out.println("Parent constructor");
}
}
class Child extends Parent {
Child() {
// Oubli d'appeler super() ici
System.out.println("Child constructor");
}
}
Comme mentionné précédemment, le mot-clé “super” fait référence à une instance de la classe parente. Par conséquent, il ne peut pas être utilisé dans une méthode statique car les méthodes statiques n’ont pas de contexte d’instance.
class Parent {
static void staticMethod() {
// super.display(); // Erreur : "super" ne peut pas être utilisé dans une méthode statique
}
}
“super” ne peut être utilisé que dans le contexte d’une classe enfant qui étend une classe parente. Utiliser “super” en dehors de ce contexte entraînera une erreur de compilation.
class Parent {
void display() {
System.out.println("Parent class");
}
}
class Example {
void someMethod() {
// super.display(); // Erreur : "super" ne peut pas être utilisé en dehors d'une classe enfant
}
}
Bien que “super” puisse être utilisé pour accéder aux membres (attributs et méthodes) de la classe parente, il ne peut pas accéder aux membres privés de la classe parente.
class Parent {
private int x;
void display() {
System.out.println("Parent class");
}
}
class Child extends Parent {
void someMethod() {
// int value = super.x; // Erreur : "x" est privé dans la classe Parent
}
}
En évitant ces erreurs courantes, vous pouvez utiliser efficacement le mot-clé “super” pour gérer l’héritage en Java.
1. Informations Générales Titre original : Un viejo que leía novelas de amor Auteur :…
1. Informations Générales Titre complet : Le cœur à rire et à pleurer : Souvenirs…
1. Pourquoi apprendre le français ? / Why Learn French? Langue internationale : Le français…
1. Définition / Definition En français, chaque nom a un genre : masculin ou féminin.…
Le mot "français" peut être masculin ou féminin selon le contexte dans lequel il est…
Emprunter une somme aussi importante que 250 000 euros sur une 25 ans est une…
This website uses cookies.