Le mot-clé super est utilisé dans différentes situations. Avant de commencer avec cet article, nous vous encourageons à vous renseigner sur l'héritage en Java pour une meilleure compréhension.
Quel est le super mot-clé en Java?
Super est un mot clé qui peut être utilisé pour invoquer des méthodes surchargées de la superclasse, ainsi que pour faire référence à des champs cachés de la superclasse.Pourquoi et quand utiliser le super mot clé?
Le mot-clé Java super a trois utilisations explicites.- Accéder aux données membres de la classe parent lorsque la classe enfant a également des données membres portant le même nom.
- Appelez les constructeurs par défaut ou paramétrés de la classe parent dans la classe enfant.
- Appelez les méthodes de la classe parent dans la classe enfant si l'enfant a des méthodes surchargées.
Exemple 1 - Accéder aux membres de données du parent
L'exemple 1 illustre comment les attributs ou les membres de données de la classe Vehicle sont accessibles dans la classe enfant Car -type. Assurez-vous d'exécuter l'extrait ci-dessous pour bien comprendre.
class Vehicle {
String name = "vehicle";
}
class Car extends Vehicle {
String name = "car";
public void printMyName() {
System.out.println(name);
}
public void printParentName() {
// use super keyword to access
// parent's data member / attribute
System.out.println(super.name);
}
public static void main(String[] args) {
Car myCar = new Car();
System.out.print("My Car's Name: ");
myCar.printMyName();
// printing the parent's name
// using the super keyword
System.out.print("My Parent Vehicle's Name: ");
myCar.printParentName();
}
}
Sortir
Nom de ma voiture : voiture
Nom de mon véhicule parent : véhicule
Exemple 2 - Accéder aux constructeurs du parent dans la classe enfant
L'appel explicite de super() vous permet d'accéder à la fois au constructeur par défaut ou paramétré de la classe parent dans la classe enfant. Voici un exemple de constructeur paramétré. Le constructeur de la classe parent, c'est-à-dire Shape , est appelé (en utilisant super() ) dans la classe enfant, c'est-à-dire Triangle , pour définir les attributs. Exécutez le programme ci-dessous pour tester la sortie par vous-même.
public class Shape {
String name;
public Shape(String n) {
System.out.println("Shape() parameterized constructor called!");
name = n;
}
}
class Triangle extends Shape {
int sides = 3;
String color;
public Triangle(String n, String c) {
// The super keyword calls the parameterized
// constructor of the parent (Shape) with
// 'n' as a parameter
super(n);
System.out.println("Triangle() parameterized constructor called!");
this.color = c;
}
public static void main(String[] args) {
Triangle myTriangle = new Triangle("Triangle Alpha", "Yellow");
System.out.println(myTriangle.name);
System.out.println(myTriangle.color);
}
}
Sortir
Constructeur paramétré Shape() appelé !
Constructeur paramétré Triangle() appelé !
Triangle Alpha
Jaune
Défi rapide : reconcevez le programme ci-dessus en utilisant le constructeur par défaut pour tester votre apprentissage. Voyez également en quoi super() est différent de super(arg).Exemple 3 - Accéder à la méthode redéfinie du parent dans la classe enfant
L'exemple 3 montre comment vous pouvez accéder aux méthodes de la classe parent que la classe enfant définit également. La classe parent Sound dans le programme ci-dessous définit une méthode voice() . La classe enfant Drum a également une méthode du même nom, c'est-à-dire voice() . Cela signifie que la méthode voice est remplacée par la sous-classe. Exécutez le programme ci-dessous pour savoir comment le mot-clé super est nécessaire pour utiliser les méthodes de la classe parent dans la classe enfant.
public class Sound {
public void voice() {
System.out.println("Play sound!");
}
}
class Drum extends Sound {
public void voice() {
System.out.println("Play drums!");
}
public void play() {
// The super keyword calls the
// voice() method of the parent
super.voice();
voice();
}
public static void main(String[] args) {
Drum myDrum = new Drum();
myDrum.play();
}
}
Sortir
Constructeur paramétré Shape() appelé !
Constructeur paramétré Triangle() appelé !
Triangle Alpha
Jaune
GO TO FULL VERSION