Surcharge du constructeur dans Java

Qu'est-ce que la surcharge de constructeur dans Java?

Java La surcharge de constructeurs est une technique dans laquelle une classe peut avoir un nombre illimitรฉ de constructeurs dont la liste de paramรจtres diffรจre. Le compilateur diffรฉrencie ces constructeurs en prenant en compte le nombre de paramรจtres dans la liste et leur type.

Voici des exemples de constructeurs valides pour la classe Account

Account(int a);
Account (int a,int b);
Account (String a,int b);

Exemple 2: Pour comprendre la surcharge des constructeurs dans Java

ร‰tape 1) Tapez le code dans l'รฉditeur.

class Demo{
      int  value1;
      int  value2;
      /*Demo(){
       value1 = 10;
       value2 = 20;
       System.out.println("Inside 1st Constructor");
     }*/
     Demo(int a){
      value1 = a;
      System.out.println("Inside 2nd Constructor");
    }
    Demo(int a,int b){
    value1 = a;
    value2 = b;
    System.out.println("Inside 3rd Constructor");
   }
   public void display(){
      System.out.println("Value1 === "+value1);
      System.out.println("Value2 === "+value2);
  }
  public static void main(String args[]){
    Demo d1 = new Demo();
    Demo d2 = new Demo(30);
    Demo d3 = new Demo(30,40);
    d1.display();
    d2.display();
    d3.display();
 }
}

ร‰tape 2) Enregistrez, compilez et exรฉcutez le code.

ร‰tape 3) Erreur = ?. Essayez de dรฉboguer l'erreur avant de passer ร  l'รฉtape suivante de Java surcharge du constructeur

ร‰tape 4) Chaque classe a une valeur par dรฉfaut Constructeur en Java. Constructeur surchargรฉ par dรฉfaut Java pour Dรฉmo de classe is Dรฉmo(). Si vous ne fournissez pas ce constructeur, le compilateur le crรฉe pour vous et initialise les variables aux valeurs par dรฉfaut. Vous pouvez choisir de remplacer ce constructeur par dรฉfaut et d'initialiser les variables aux valeurs souhaitรฉes, comme indiquรฉ dans l'exemple 1.

Mais si vous spรฉcifiez un constructeur paramรฉtrรฉ comme Demo(int a) et que vous souhaitez utiliser le constructeur par dรฉfaut Java Demo(), vous devez obligatoirement le prรฉciser.

En dโ€™autres termes, au cas oรน votre constructeur surchargerait Java est remplacรฉ et vous souhaitez utiliser le constructeur par dรฉfaut Java, il faut le prรฉciser.

ร‰tape 5) Dรฉcommentez la ligne nยฐ4-8. Enregistrez, compilez et exรฉcutez le code.

Pourquoi avons-nous besoin de la surcharge du constructeur dans Java?

Surcharge du constructeur dans Java permet d'avoir plusieurs constructeurs dans une classe, chacun ayant des listes de paramรจtres diffรฉrentes. Cela amรฉliore la flexibilitรฉ et l'efficacitรฉ du code.

  • Flexibilitรฉ dans la crรฉation d'objets : La surcharge du constructeur vous permet d'initialiser des objets de diffรฉrentes maniรจres, en fonction du nombre ou du type de paramรจtres.
  • Rรฉutilisabilitรฉ du code : Vous pouvez rรฉutiliser la logique du constructeur en appelant un constructeur ร  partir d'un autre ร  l'aide du mot-clรฉ this().
  • Lisibilitรฉ amรฉliorรฉe : Les constructeurs surchargรฉs contribuent ร  rendre le code plus intuitif en offrant des options de constructeur spรฉcifiques pour diffรฉrents besoins d'initialisation.
  • Initialisation par dรฉfaut et personnalisรฉe : La surcharge du constructeur vous permet de crรฉer facilement des objets par dรฉfaut et des objets initialisรฉs de maniรจre personnalisรฉe.

Questions frรฉquentes

Constructeur est une mรฉthode spรฉciale utilisรฉe pour initialiser un objet nouvellement crรฉรฉ et appelรฉe juste aprรจs l'allocation de la mรฉmoire pour l'objet. Il peut รชtre utilisรฉ pour initialiser les objets aux valeurs souhaitรฉes ou aux valeurs par dรฉfaut au moment de la crรฉation de l'objet. Il n'est pas obligatoire pour le codeur d'รฉcrire un constructeur pour une classe.

Si aucun constructeur dรฉfini par l'utilisateur n'est fourni pour une classe, le compilateur initialise les variables membres ร  leurs valeurs par dรฉfaut.

  • les types de donnรฉes numรฉriques sont dรฉfinis sur 0
  • Les types de donnรฉes char sont dรฉfinis sur le caractรจre nul ('\0')
  • les variables de rรฉfรฉrence sont dรฉfinies sur null

  1. Il a la mรชme nom comme la classe
  2. Il ne devrait mรชme pas renvoyer de valeur annuler

Exemple 1: Crรฉez votre premier constructeur dans Java

ร‰tape 1) Tapez le programme constructeur suivant dans Java รฉditeur.

class Demo{
      int  value1;
      int  value2;
      Demo(){
         value1 = 10;
         value2 = 20;
         System.out.println("Inside Constructor");
     }
 
     public void display(){
        System.out.println("Value1 === "+value1);
        System.out.println("Value2 === "+value2);
    }
 
   public static void main(String args[]){
       Demo d1 = new Demo();
      d1.display();
  }
}

ร‰tape 2) Enregistrez, exรฉcutez et compilez le programme constructeur dans Java et observez la sortie.

Production attendue:

Inside Constructor
Value1 === 10
Value2 === 20

Considรฉrons un scรฉnario dans lequel une classe de base est รฉtendue par un enfant. Chaque fois qu'un objet de la classe enfant est crรฉรฉ, le constructeur de la classe parent est invoquรฉ en premier. C'est appelรฉ Chaรฎnage constructeur.

Exemple 3: Comprendre le chaรฎnage des constructeurs

ร‰tape 1) Copiez le code suivant dans l'รฉditeur.

class Demo{
   int  value1;
   int  value2;
    Demo(){
      value1 = 1;
      value2 = 2;
      System.out.println("Inside 1st Parent Constructor");
   }
   Demo(int a){
      value1 = a;
      System.out.println("Inside 2nd Parent Constructor");
   }
  public void display(){
     System.out.println("Value1 === "+value1);
     System.out.println("Value2 === "+value2);
  }
  public static void main(String args[]){
     DemoChild d1 = new DemoChild();
     d1.display();
  }
}
class DemoChild extends Demo{
    int value3;
    int value4;
    DemoChild(){
    //super(5);
     value3 = 3;
     value4 = 4;
    System.out.println("Inside the Constructor of Child");
    }
    public void display(){
      System.out.println("Value1 === "+value1);
      System.out.println("Value2 === "+value2);
      System.out.println("Value1 === "+value3);
      System.out.println("Value2 === "+value4);
   }
}

ร‰tape 2) Exรฉcutez le code. En raison du chaรฎnage des constructeurs, lorsque l'objet de la classe enfant DemoChild est crรฉรฉ, le constructeur Demo() de la classe parent est invoquรฉ en premier et ensuite le constructeur DemoChild() de l'enfant est crรฉรฉ.

Production attendue:

Inside 1st Parent Constructor
Inside the Constructor of Child
Value1 === 1
Value2 === 2
Value1 === 3
Value2 === 4

ร‰tape 3) Vous pouvez observer que le constructeur de la classe parent Demo est remplacรฉ. Que se passe-t-il si vous souhaitez appeler le constructeur remplacรฉ Demo(int a) au lieu du constructeur par dรฉfaut Demo() lors de la crรฉation de votre objet enfant ?

Dans de tels cas, vous pouvez utiliser le mot-clรฉ "super" pour appeler les constructeurs remplacรฉs de la classe parent.

Syntaxe:-

super();
--or--
super(parameter list);

Exemple : Si votre constructeur est comme Dรฉmo (nom de chaรฎne, int a), vous prรฉciserez super("Javaยป,5). S'il est utilisรฉ, le mot-clรฉ super doit รชtre la premiรจre ligne de code dans le constructeur de la classe enfant.

ร‰tape 4) Dรฉcommentez la ligne nยฐ26 et exรฉcutez le code. Observez la sortie.

Sortie :

Inside 2nd Parent Constructor
Inside the Constructor of Child
Value1 === 5
Value2 === 0
Value1 === 3
Value2 === 4

Rรฉsumez cet article avec :