Java >> Tutoriel Java >  >> Java

Super mot-clé en Java

Comme nous le savons tous, Java est riche en mots-clés et est un pur langage de programmation orienté objet; dans cet article, nous apprendrons à connaître le mot-clé Super. Si vous n'êtes pas familier avec la Classe enfant et Classe parent concepts, consultez les tutoriels précédents.

Super mot-clé – Définition et utilisation

En Java, le mot clé super fait référence à un objet, c'est-à-dire une variable de référence d'un objet de classe parent immédiat. Chaque fois que vous créez l'instance d'une sous-classe, une instance de votre classe parent est implicitement créée. Le mot-clé super aide à référencer ces variables. Le mot-clé super aide à référencer ces variables. Voici quelques-unes des utilisations courantes du super mot-clé.

  • Il agit comme un appelant de la méthode de la superclasse.
  • Le mot clé super aide à accéder au constructeur de la superclasse.
  • Les programmeurs utilisent également le mot-clé super car les super-classes et les sous-classes ont le même nom de méthode. Pour appeler la méthode de la classe parent depuis la classe enfant en évitant le même nom de méthode de la classe enfant, les programmeurs Java utilisent le mot-clé super. C'est alors que la classe enfant remplace la méthode déjà créée dans la classe parent.

Pour avoir une compréhension pratique du super mot-clé, vous devez avoir la connaissance préalable du polymorphisme et Héritage

Exemple

class Engineer { 		// Superclass (parent class)
  public void coding() 
  {
    	System.out.println("Computer Engineers are Programmers");
  }
}

class Coder extends Engineer { 		// Subclass (child class)
  public void coding()
  {
    super.coding(); 	// Call the superclass method
    System.out.println("Coders also know different Programming languages");
  }
}

public class Main {
  public static void main(String args[]) {
    Engineer e1 = new Coder(); 	// Creates a Coder object
    e1.coding(); 	// Call the method on the Coder object
  }
}

Dans ce programme, nous avons le nom de méthode coding() aussi bien dans la classe parent que dans la classe enfant. A partir de la classe Main, nous avons créé un objet e1 de la classe enfant qui invoque le coding() méthode. Il appelle le coding() méthode de la classe enfant dans laquelle le super.coding() est responsable de l'appel de coding() méthode de la classe parent.

Notez que la déclaration de super mot-clé doit être la première déclaration du constructeur de la classe dérivée.

Accéder à la variable de la superclasse (classe parente)

Les programmeurs peuvent également utiliser le super mot-clé pour accéder au membre de données (variables au sein d'une classe) de la classe mère. Le super mot clé devient pratique lorsque la classe parent et la classe enfant ont le même nom de variable.

Exemple

class Engineer { 		// Superclass (parent class)
    	String name = "Karlos";
}
class Coder extends Engineer 
{
// Subclass (child class)
     void printName() {  
        String name = "Ray"; 
    System.out.println(name);     
    System.out.println(super.name);
    }
}

public class Main {
  public static void main(String args[]) {
    Coder e1 = new Coder(); 	
    e1.printName(); 
  }
}


Dans ce programme, nous avons mis deux variables de type chaîne portant le même nom. Une variable 'name' dans la classe parent et l'autre dans la classe enfant mais avec des valeurs différentes attribuées à chacune d'entre elles. Maintenant, à partir de la méthode de la classe enfant, si vous souhaitez accéder à la variable de la classe parent en contournant le même nom de variable, nous devons utiliser le mot-clé super comme indiqué System.out.println(super.name); . Pour accéder à la variable de classe enfant, nous devons simplement utiliser System.out.println(name); .

Accéder à la méthode de la superclasse

Nous utilisons le mot-clé super lorsqu'il y a deux méthodes (dans la classe parent et la classe enfant) avec le même nom. Le mot-clé super vient à la rescousse lorsque les programmeurs veulent appeler la méthode de la classe parent depuis la classe enfant, en évitant le même nom de méthode de la classe enfant. Voici un extrait de code montrant l'utilisation de super avec cette fonctionnalité.

Exemple

class Engineer { 		// Superclass (parent class)
    	void message()
    	{
    	    System.out.println("This is parent class");
    	}
}

class Coder extends Engineer 
{
void message()
    	{
    	    System.out.println("This is child class");
    	}
    	void display() 
   	 { 
        // this method call will invoke message() method of the current class
        message(); 
  
        // this method call will invoke message() method of the parent class
        super.message(); 
    } 
}

public class Main {
  public static void main(String args[]) {
    Coder e1 = new Coder(); 	
    e1.display(); 
  }
}

Ici aussi, nous avons créé un objet e1 de la classe enfant qui invoque le message() méthode. Il appelle le message() méthode de la classe enfant dans laquelle le super.message() est responsable de l'appel du message() méthode de la classe parent.

Le processus d'appel de la méthode de la classe parent en ignorant la méthode de la classe enfant est appelé remplacement de méthode.

Accéder au constructeur d'une superclasse

Les programmeurs utilisent également le mot-clé super pour accéder au constructeur de la classe parent. En outre, le mot clé super peut appeler des constructeurs paramétrés et non paramétrés en fonction du type et du code du constructeur. Voici un extrait de code montrant son utilisation.

Exemple

class Engineer { 	// Superclass (parent class)
    	Engineer()
    	{
    	    System.out.println("This is a parent class constructor");
    	}
}

class Coder extends Engineer 
{
    Coder()
{
    	    super();    // this will invoke the constructor of the parent class
    	    System.out.println("This is a child class constructor");
    	}
}

public class Main {
  public static void main(String args[]) {
    Coder e1 = new Coder(); 	
  }
}

Ici aussi, nous avons deux constructeurs distincts des deux classes respectives. De plus, nous avons créé un objet e1 de la classe enfant qui invoque automatiquement le constructeur de la classe Coder lorsque l'objet est créé. Le Codeur() le constructeur appelle alors le super() , qui aide à invoquer le constructeur de la classe parent depuis la classe enfant.

Que se passe-t-il si la classe enfant ne remplace pas la méthode de la classe parent ?

Il existe certaines situations où la classe enfant ne remplace pas la méthode de sa classe parent. Dans ce cas, nous n'avons pas besoin d'utiliser le super mot-clé avec la méthode de la classe enfant factice. Dans une telle situation, nous n'avons qu'une seule version de la méthode. Conformément à la règle d'héritage, la classe enfant peut accéder à la méthode de la classe parent. Par conséquent, nous pouvons invoquer directement la méthode de la classe parente sans utiliser le mot-clé super.

Exemple

class Engineer { 	// Superclass (parent class)
    	void disp()
    	{
    	    System.out.println("This is a parent class");
    	}
}

class Coder extends Engineer 
{
        void Printt()
        {
    	    disp();    
    	}
}

public class Main {
  public static void main(String args[]) {
    Coder e1 = new Coder(); 	
    e1.Printt();
  }
}

Dans ce programme, nous n'avons pas utilisé le super mot clé car, conformément à la règle d'héritage, la classe enfant peut accéder à la méthode de la classe parent que notre disp() méthode a fait. Appel de disp() de Printt() dans la classe enfant simplement appelée disp() méthode de la classe parent.


Balise Java