Implicit och Explicit Constructctor Chaining

click fraud protection

Konstruktörkedja i Java är helt enkelt handlingen av en konstruktör som kallar en annan konstruktör via arv. Detta händer implicit när en underklass är konstruerad: dess första uppgift är att kalla sin föräldrars konstruktormetod. Men programmerare kan också ringa en annan konstruktör uttryckligen med hjälp av nyckelorden detta() eller super(). De detta() nyckelordet kallar ett annat överbelastad konstruktör i samma klass; de super() nyckelordet kallar en icke-standardkonstruktör i en superklass.

Implicit Constructctor Chaining

Konstruktorkedjning sker genom användning av arv. En underklasskonstruktormetods första uppgift är att kalla sin superklass 'konstruktormetod. Detta säkerställer att skapandet av underklassobjektet börjar med initialiseringen av klasserna ovanför det i arvskedjan.

Det kan finnas valfritt antal klasser i en arvskedja. Varje konstruktionsmetod anropar kedjan tills klassen överst har nåtts och initialiserats. Sedan initialiseras varje efterföljande klass nedan när kedjan lindar ner till den ursprungliga underklassen. Denna process kallas konstruktorkedjning.

instagram viewer

Anteckna det:

  • Detta implicita uppmaning till superklassen är densamma som om underklassen hade inkluderat super() sökord, d.v.s. super() är implicit här.
  • Om en no-args-konstruktör inte ingår i klassen skapar Java en bakom kulisserna och åberopar den. Detta innebär att om din enda konstruktör tar ett argument måste du uttryckligen använda en detta() eller super() sökord för att åberopa det (se nedan).

Tänk på detta superklassdjur utökat av däggdjur:

klass Djur {
// konstruktör
Djur(){
 System.out.println ("Vi är i klassens Djurens konstruktör.");
}
}
klass däggdjur utökar djur {
//constructor
Däggdjur(){
 System.out.println ("Vi är i klass däggdjurs konstruktör.");
}
}

Låt oss nu anpassa klassen däggdjur:

public class ChainingConstructors {
 /**
* @param arg
*/
public static void main (String [] args) {
Däggdjur m = nytt däggdjur ();
}
}

När ovanstående program körs utlöser Java implicit ett samtal till superklassens djurkonstruktör och sedan till klassens konstruktör. Utgången kommer därför att vara:

Vi är i klass Djurens konstruktör
Vi är i klass däggdjurs konstruktör

Explicit Constructctor Chaining använder detta () eller super ()

Explicit användning av detta() eller super() nyckelord låter dig ringa en icke-standardkonstruktör.

  • För att ringa en standardkonstruktör som inte är args eller en överbelastad konstruktör från samma klass använder du detta() nyckelord.
  • För att ringa en superklasse-konstruktör som inte är standard från en underklass använder du super() nyckelord. Om till exempel superklassen har flera konstruktörer kanske en underklass alltid vill ringa en specifik konstruktör, snarare än standard.

Observera att samtalet till en annan konstruktör måste vara det första uttalandet i konstruktören eller Java kommer att kasta ett sammanställningsfel.

Tänk på koden nedan där en ny underklass, Carnivore, ärver från däggdjursklassen som ärver från djurklassen, och varje klass har nu en konstruktör som tar ett argument.

Här är superklassen Animal:

allmän klass Djur
privat strängnamn;
public animal (String name) // konstruktör med ett argument
{
this.name = name;
System.out.println ("Jag körs först.");
}
}
Observera att konstruktören nu tar en namn av typ Sträng som en parameter och att kroppen i klassen anropar detta() på konstruktören. Utan den uttryckliga användningen av detta namnet, Java skulle skapa en standard, no-args-konstruktör och åberopa det istället.

Här är underklassen däggdjur:

däggdjur från allmän klass utökar djur {
offentligt däggdjur (strängnamn)
{
super (namn);
System.out.println ("Jag körs sekund");
}
}

Dess konstruktör tar också ett argument, och den använder super (namn) att åberopa en specifik konstruktör i sin superklass.

Här är en annan underklass Carnivore. Detta ärver från däggdjur:

offentlig klass Carnivore utökar däggdjur {
public Carnivore (String name)
{
super (namn);
System.out.println ("Jag körs senast");
}
}

När de körs skulle dessa tre kodblock skrivas ut:

Jag är avrättad först.
Jag är avrättad andra.
Jag är avrättad sist.

För att sammanfatta: När en instans av Carnivore-klassen skapas är den första åtgärden med dess konstruktormetod att ringa däggdjurskonstruktormetoden. På samma sätt är den första åtgärden med däggdjurskonstruktormetoden att kalla djurkonstruktormetoden. En konstruktionsmetodkedja säkerställer att förekomsten av Carnivore-objektet har korrekt initierat alla klasser i dess arvskedja.

instagram story viewer