Le super Le mot-clé en Java est une variable de référence qui est utilisée pour faire référence à un objet de classe parent immédiat.
Chaque fois que vous créez l'instance de sous-classe, une instance de classe parent est créée implicitement et référencée par une variable de super référence.
Utilisation du super mot-clé Java
- super peut être utilisé pour faire référence à une variable d'instance de classe parent immédiate.
- super peut être utilisé pour invoquer la méthode de classe parent immédiate.
- super() peut être utilisé pour invoquer le constructeur de classe parent immédiat.
1) super est utilisé pour faire référence à une variable d'instance de classe parent immédiate.
Nous pouvons utiliser un super mot-clé pour accéder aux données membres ou au champ de la classe parent. Il est utilisé si la classe parent et la classe enfant ont les mêmes champs.
si-sinon java
class Animal{ String color='white'; } class Dog extends Animal{ String color='black'; void printColor(){ System.out.println(color);//prints color of Dog class System.out.println(super.color);//prints color of Animal class } } class TestSuper1{ public static void main(String args[]){ Dog d=new Dog(); d.printColor(); }}Testez-le maintenant
Sortir:
black white
Dans l’exemple ci-dessus, les deux classes Animal et Dog ont une couleur de propriété commune. Si nous imprimons la propriété color, la couleur de la classe actuelle sera imprimée par défaut. Pour accéder à la propriété parent, nous devons utiliser le super mot-clé.
2) super peut être utilisé pour invoquer la méthode de classe parent
Le super mot-clé peut également être utilisé pour appeler la méthode de la classe parent. Il doit être utilisé si la sous-classe contient la même méthode que la classe parent. En d’autres termes, il est utilisé si la méthode est remplacée.
class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void eat(){System.out.println('eating bread...');} void bark(){System.out.println('barking...');} void work(){ super.eat(); bark(); } } class TestSuper2{ public static void main(String args[]){ Dog d=new Dog(); d.work(); }}Testez-le maintenant
Sortir:
eating... barking...
Dans l'exemple ci-dessus, Animal et Dog, les deux classes ont la méthode eat() si nous appelons la méthode eat() de la classe Dog, elle appellera la méthode eat() de la classe Dog par défaut car la priorité est donnée au local.
Pour appeler la méthode de la classe parent, nous devons utiliser le mot-clé super.
3) super est utilisé pour appeler le constructeur de la classe parent.
Le super mot-clé peut également être utilisé pour appeler le constructeur de la classe parent. Voyons un exemple simple :
class Animal{ Animal(){System.out.println('animal is created');} } class Dog extends Animal{ Dog(){ super(); System.out.println('dog is created'); } } class TestSuper3{ public static void main(String args[]){ Dog d=new Dog(); }}Testez-le maintenant
Sortir:
animal is created dog is created
Remarque : super() est ajouté automatiquement dans chaque constructeur de classe par le compilateur s'il n'y a pas de super() ou this().
Comme nous le savons bien, le constructeur par défaut est fourni automatiquement par le compilateur s'il n'y a pas de constructeur. Mais il ajoute également super() comme première instruction.
Un autre exemple de super mot-clé où super() est fourni implicitement par le compilateur.
class Animal{ Animal(){System.out.println('animal is created');} } class Dog extends Animal{ Dog(){ System.out.println('dog is created'); } } class TestSuper4{ public static void main(String args[]){ Dog d=new Dog(); }}Testez-le maintenant
Sortir:
animal is created dog is created
super exemple : utilisation réelle
Voyons l'utilisation réelle du super mot-clé. Ici, la classe Emp hérite de la classe Person donc toutes les propriétés de Person seront héritées de Emp par défaut. Pour initialiser toutes les propriétés, nous utilisons le constructeur de classe parent de la classe enfant. De cette manière, nous réutilisons le constructeur de la classe parent.
class Person{ int id; String name; Person(int id,String name){ this.id=id; this.name=name; } } class Emp extends Person{ float salary; Emp(int id,String name,float salary){ super(id,name);//reusing parent constructor this.salary=salary; } void display(){System.out.println(id+' '+name+' '+salary);} } class TestSuper5{ public static void main(String[] args){ Emp e1=new Emp(1,'ankit',45000f); e1.display(); }}Testez-le maintenant
Sortir:
1 ankit 45000