Super mot-clé Java (avec des exemples)

Dans ce tutoriel, nous allons en apprendre davantage sur le mot clé super en Java à l'aide d'exemples.

Le supermot clé en Java est utilisé dans les sous-classes pour accéder aux membres de la superclasse (attributs, constructeurs et méthodes).

Avant d'en apprendre davantage sur le supermot - clé, assurez-vous de connaître l'héritage Java.

Utilisations du super mot-clé

  1. Pour appeler des méthodes de la superclasse qui est remplacée dans la sous-classe.
  2. Pour accéder aux attributs (champs) de la superclasse si la superclasse et la sous-classe ont des attributs avec le même nom.
  3. Pour appeler explicitement la superclasse no-arg (par défaut) ou le constructeur paramétré depuis le constructeur de la sous-classe.

Comprenons chacune de ces utilisations.

1. Accéder aux méthodes remplacées de la superclasse

Si des méthodes portant le même nom sont définies à la fois dans la superclasse et la sous-classe, la méthode de la sous-classe remplace la méthode de la superclasse. C'est ce qu'on appelle le remplacement de méthode.

Exemple 1: remplacement de méthode

 class Animal ( // overridden method public void display()( System.out.println("I am an animal"); ) ) class Dog extends Animal ( // overriding method @Override public void display()( System.out.println("I am a dog"); ) public void printMessage()( display(); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); dog1.printMessage(); ) ) 

Production

 Je suis un chien 

Dans cet exemple, en créant un objet dog1 de la classe Dog, nous pouvons appeler sa méthode printMessage () qui exécute alors l' display()instruction.

Comme elle display()est définie dans les deux classes, la méthode de la sous-classe Dog remplace la méthode de la superclasse Animal. Par conséquent, le display()de la sous-classe est appelé.

Que faire si la méthode surchargée de la superclasse doit être appelée?

Nous utilisons super.display()si la méthode surchargée display()de la superclasse Animal doit être appelée.

Exemple 2: méthode Super to Call Superclass

 class Animal ( // overridden method public void display()( System.out.println("I am an animal"); ) ) class Dog extends Animal ( // overriding method @Override public void display()( System.out.println("I am a dog"); ) public void printMessage()( // this calls overriding method display(); // this calls overridden method super.display(); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); dog1.printMessage(); ) ) 

Production

 Je suis un chien je suis un animal 

Voici comment fonctionne le programme ci-dessus.

2. Accéder aux attributs de la superclasse

La superclasse et la sous-classe peuvent avoir des attributs avec le même nom. Nous utilisons le supermot - clé pour accéder à l'attribut de la superclasse.

Exemple 3: Accéder à l'attribut de la superclasse

 class Animal ( protected String; ) class Dog extends Animal ( public String; public void printType() ( System.out.println("I am a " + type); System.out.println("I am an " + super.type); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); dog1.printType(); ) ) 

Sortie :

 Je suis un mammifère je suis un animal 

Dans cet exemple, nous avons défini le même type de champ d'instance dans la superclasse Animal et dans la sous-classe Dog.

Nous avons ensuite créé un objet dog1 de la classe Dog. Ensuite, la printType()méthode est appelée à l'aide de cet objet.

À l'intérieur de la printType()fonction,

  • type fait référence à l'attribut de la sous-classe Dog.
  • super.type fait référence à l'attribut de la superclasse Animal.

Par conséquent, System.out.println("I am a " + type);je suis un mammifère. Et, System.out.println("I am an " + super.type);imprime je suis un animal.

3. Utilisation de super () pour accéder au constructeur de superclasse

Comme nous le savons, lorsqu'un objet d'une classe est créé, son constructeur par défaut est automatiquement appelé.

Pour appeler explicitement le constructeur de superclasse à partir du constructeur de sous-classe, nous utilisons super(). C'est une forme spéciale du supermot - clé.

super() ne peut être utilisé qu'à l'intérieur du constructeur de sous-classe et doit être la première instruction.

Exemple 4: Utilisation de super ()

 class Animal ( // default or no-arg constructor of class Animal Animal() ( System.out.println("I am an animal"); ) ) class Dog extends Animal ( // default or no-arg constructor of class Dog Dog() ( // calling default constructor of the superclass super(); System.out.println("I am a dog"); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); ) ) 

Production

 Je suis un animal je suis un chien 

Ici, lorsqu'un objet dog1 de la classe Dog est créé, il appelle automatiquement le constructeur par défaut ou sans argument de cette classe.

À l'intérieur du constructeur de sous-classe, l' super()instruction appelle le constructeur de la superclasse et exécute les instructions qu'elle contient. Par conséquent, nous obtenons le résultat que je suis un animal.

Le flux du programme revient ensuite au constructeur de sous-classe et exécute les instructions restantes. Ainsi, je suis un chien sera imprimé.

Cependant, l'utilisation super()n'est pas obligatoire. Même s'il super()n'est pas utilisé dans le constructeur de sous-classe, le compilateur appelle implicitement le constructeur par défaut de la superclasse.

Alors, pourquoi utiliser du code redondant si le compilateur invoque automatiquement super ()?

Il est requis si le constructeur paramétré (un constructeur qui prend des arguments) de la superclasse doit être appelé depuis le constructeur de la sous-classe.

Le paramétré super()doit toujours être la première instruction dans le corps du constructeur de la sous-classe, sinon, nous obtenons une erreur de compilation.

Exemple 5: Appel d'un constructeur paramétré à l'aide de super ()

 class Animal ( // default or no-arg constructor Animal() ( System.out.println("I am an animal"); ) // parameterized constructor Animal(String type) ( System.out.println("Type: "+type); ) ) class Dog extends Animal ( // default constructor Dog() ( // calling parameterized constructor of the superclass super("Animal"); System.out.println("I am a dog"); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); ) ) 

Production

 Type: Animal Je suis un chien 

Le compilateur peut appeler automatiquement le constructeur no-arg. Cependant, il ne peut pas appeler de constructeurs paramétrés.

Si un constructeur paramétré doit être appelé, nous devons le définir explicitement dans le constructeur de sous-classe.

Notez que dans l'exemple ci-dessus, nous avons explicitement appelé le constructeur paramétré super("Animal"). Le compilateur n'appelle pas le constructeur par défaut de la superclasse dans ce cas.

Articles intéressants...