Konstruktør Overbelastning ind Java

Hvilken Constructor Overloading i Java?

Java Konstruktøroverbelastning er en teknik, hvor en klasse kan have et hvilket som helst antal konstruktører, der adskiller sig i parameterlisten. Compileren differentierer disse konstruktører ved at tage højde for antallet af parametre i listen og deres type.

Eksempler på gyldige konstruktører til klassekonto er

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

Eksempel 2: For at forstå Constructor Overloading i Java

Trin 1) Indtast koden i editoren.

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();
 }
}

Trin 2) Gem, kompilér og kør koden.

Trin 3) Fejl = ?. Prøv at fejlfinde fejlen, før du fortsætter til næste trin af Java konstruktør overbelastning

Trin 4) Hver klasse har en standard Konstruktør i Java. Standard overbelastet konstruktør Java forum klasse demo is Demo(). Hvis du ikke leverer denne konstruktør, opretter compileren den for dig og initialiserer variablerne til standardværdier. Du kan vælge at tilsidesætte denne standardkonstruktør og initialisere variabler til dine ønskede værdier som vist i eksempel 1.

Men hvis du angiver en parametriseret konstruktør som Demo(int a), og vil bruge standardkonstruktøren Java Demo(), det er obligatorisk for dig at angive det.

Med andre ord, i tilfælde af at din overbelastende konstruktør ind Java er tilsidesat, og du vil bruge standardkonstruktøren Java, det skal specificeres.

Trin 5) Fjern kommentar linje #4-8. Gem, kompilér og kør koden.

Hvorfor har vi brug for Constructor Overloading Java?

Konstruktør overbelaster ind Java tillader flere konstruktører i en klasse, der hver har forskellige parameterlister. Det øger fleksibiliteten og forbedrer kodeeffektiviteten.

  • Fleksibilitet i objektoprettelse: Konstruktøroverbelastning giver dig mulighed for at initialisere objekter på forskellige måder, afhængigt af antallet eller typen af ​​parametre.
  • Genanvendelighed af kode: Du kan genbruge konstruktørlogik ved at kalde en konstruktør fra en anden ved at bruge dette() nøgleordet.
  • Forbedret læsbarhed: Overbelastede konstruktører hjælper med at gøre koden mere intuitiv ved at tilbyde specifikke konstruktørmuligheder til forskellige initialiseringsbehov.
  • Standard og tilpasset initialisering: Constructor-overbelastning giver dig mulighed for nemt at oprette både standard- og brugerdefinerede initialiserede objekter.

Ofte Stillede Spørgsmål

Constructor er en speciel metode, der bruges til at initialisere et nyoprettet objekt og kaldes lige efter, at hukommelsen er allokeret til objektet. Den kan bruges til at initialisere objekterne til ønskede værdier eller standardværdier på tidspunktet for objektoprettelse. Det er ikke obligatorisk for koderen at skrive en konstruktør til en klasse.

Hvis der ikke er angivet en brugerdefineret konstruktør for en klasse, initialiserer compiler medlemsvariabler til dens standardværdier.

  • numeriske datatyper er sat til 0
  • char-datatyper er sat til null-tegn('\0')
  • referencevariabler er sat til null

  1. Det har samme navn som klassen
  2. Det bør ikke engang returnere en værdi ugyldig

Eksempel 1: Opret din første konstruktør i Java

Trin 1) Indtast følgende konstruktørprogram i Java editor.

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();
  }
}

Trin 2) Gem, kør og kompilér konstruktørprogrammet i Java og observer outputtet.

Forventet output:

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

Overvej et scenario, hvor en basisklasse udvides med et barn. Når et objekt af den underordnede klasse er oprettet, kaldes konstruktøren af ​​den overordnede klasse først. Dette kaldes Konstruktorkæde.

Eksempel 3: For at forstå konstruktørkæder

Trin 1) Kopier følgende kode ind i editoren.

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);
   }
}

Trin 2) Kør koden. På grund af konstruktørkæden, når objektet for den underordnede klasse DemoChild oprettes, startes constructor Demo() af den overordnede klasse først, og senere oprettes constructor DemoChild() for barnet.

Forventet output:

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

Trin 3) Du kan se, at konstruktøren af ​​den overordnede klasse Demo er tilsidesat. Hvad hvis du vil kalde den overstyrede konstruktør Demo(int a) i stedet for standardkonstruktøren Demo(), når dit underordnede objekt oprettes?

I sådanne tilfælde kan du bruge søgeordet "super" at kalde tilsidesatte konstruktører af den overordnede klasse.

Syntaks:-

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

Eksempel: Hvis din konstruktør er ligesom Demo(strengnavn,int a), vil du angive super(“Java”,5). Hvis det bruges, søgeordet super skal være den første kodelinje i børneklassens konstruktør.

Trin 4) Fjern kommentar linje #26 og kør koden. Overhold outputtet.

Output:

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