logo

Vad är constructor chaining i Java?

I Java, konstruktörskedja är en sekvens av anrop konstruktörer vid initialisering av ett objekt. Det används när vi vill anropa ett antal konstruktörer, en efter en genom att endast använda en instans. I det här avsnittet kommer vi att diskutera konstruktörskedja i Java i detalj med korrekta exempel. Låt oss ta en snabb titt på vad är en konstruktor i Java.

Konstruktör

I Java , en konstruktor är samma som en metod men den enda skillnaden är att konstruktorn har samma namn som klassnamnet. Den används för att skapa en instans av klassen. Det anropas automatiskt när vi skapar ett objekt i klassen. Den har ingen returtyp. Kom ihåg att en konstruktor inte kan vara det abstrakt , slutlig , synkroniserad , och statisk . Vi kan inte åsidosätta en konstruktör.

Det finns två typer av konstruktörer i Java:

  • Default Constructor (även känd som en no-argument constructor)
  • Parameteriserad konstruktör

Konstruktörskedja

I konstruktörskedjan anropas en konstruktör från en annan konstruktör i samma klass som denna process är känd som konstruktörskedja. Det sker genom arv. När vi skapar en instans av en härledd klass, anropas först alla konstruktörer av den ärvda klassen (basklassen), efter det anropas konstruktorn för den anropande klassen (derived class).

Vi kan åstadkomma konstruktörskedja på två sätt:

java print
    Inom samma klass:Om konstruktörerna tillhör samma klass använder vi detta Från basklassen:Om konstruktören tillhör olika klasser (förälder- och barnklasser) använder vi super nyckelord för att anropa konstruktorn från basklassen.

Kom ihåg att ändra ordningen på konstruktorn inte påverkar utdata.

Vad är constructor chaining i Java

Behovet av konstruktörskedja

Anta att det finns fem uppgifter att utföra. Det finns två sätt att utföra dessa uppgifter, antingen implementera alla uppgifter i en enda konstruktor eller skapa separata uppgifter i en enda konstruktor.

Genom att använda konstruktorkedjemekanismen kan vi implementera flera uppgifter i en enda konstruktör. Så närhelst vi möter sådana typer av problem, bör vi använda konstruktorkedja. Vi kan göra programmet mer läsbart och begripligt genom att använda constructor chaining.

ett exempel på ett OS med öppen källkod är

Regler för konstruktörskedja

  • Ett uttryck som använder detta nyckelordet måste vara den första raden i konstruktorn.
  • Beställaspelar ingen roll i konstruktörskedja.
  • Det måste finnas minst en konstruktör som inte använder detta

Constructor Ringer från en annan konstruktör

Anropet av konstruktorn kan göras på två sätt:

    Genom att använda detta() nyckelord:Den används när vi vill anropa den aktuella klasskonstruktorn inom samma klass.Genom att använda super() nyckelord:Den används när vi vill anropa superklasskonstruktorn från basklassen.

Notera: I samma konstruktorblock kan vi inte använda this() och super() samtidigt.

Låt oss förstå dessa två begrepp genom Java-program.

Exempel på konstruktionskedja

Ringer Current Class Constructor

Vi använder detta() nyckelord om vi vill anropa den aktuella klasskonstruktorn inom samma klass. Användningen av this() är obligatorisk eftersom JVM lägg det aldrig automatiskt som super() nyckelord. Observera att detta() måste vara den första raden i konstruktorn. Det måste finnas minst en konstruktör utan detta() nyckelord .

Syntax:

 this(); or this(parameters list); 

Till exempel:

 this(); this('Javatpoint'); 

Låt oss skapa ett Java-program och anropa den nuvarande klasskonstruktorn.

ConstructorChain.java

 public class ConstructorChain { //default constructor ConstructorChain() { this('Javatpoint'); System.out.println('Default constructor called.'); } //parameterized constructor ConstructorChain(String str) { System.out.println('Parameterized constructor called'); } //main method public static void main(String args[]) { //initializes the instance of example class ConstructorChain cc = new ConstructorChain(); } } 

Produktion:

Vad är constructor chaining i Java

I exemplet ovan har vi skapat en instans av klassen utan att skicka någon parameter. Den anropar först standardkonstruktorn och standardkonstruktorn omdirigerar anropet till den parametriserade på grund av this(). Satserna inuti den parametriserade konstruktorn exekveras och återgår till standardkonstruktorn. Därefter exekveras resten av satserna i standardkonstruktorn och objektet initieras framgångsrikt. Följande är anropssekvensen för konstruktorn:

 ConstructorChain cc = new ConstructorChain(); -> ConstructorChain() -> ConstructorChain(String str) -> System.out.println() -> ConstructorChain() -> System.out.println() 

Ringer Super Class Constructor

Ibland måste vi anropa superklassen (förälderklass) konstruktorn från den underordnade klassen (derived class) i sådana fall använder vi nyckelordet super() i den härledda klasskonstruktorn. Det är valfritt att skriva super() eftersom JVM automatiskt lägger det. Det ska alltid skrivas på första raden. Vi får ett syntaxfel om vi försöker anropa en superklasskonstruktor i barnklassen.

välj från flera tabeller i sql

Syntax:

 super(); or super(Parameter List); 

super(): Den anropar no-argument- eller standardkonstruktorn för superklassen.

binärt sökträd

super(parametrar): Den anropar den parametriserade superklassens konstruktor.

Kom ihåg att superklasskonstruktorn inte kan ärvas i underklassen. Det kan anropas från underklasskonstruktorn genom att använda supernyckelordet.

Låt oss skapa ett Java-program och implementera konstruktorkedja i en ärvd klass.

ConstructorChaining.java

 //parent class or base class class Demo { //base class default constructor Demo() { this(80, 90); System.out.println('Base class default constructor called'); } //base class parameterized constructor Demo(int x, int y) { System.out.println('Base class parameterized constructor called'); } } //derived class or child class class Prototype extends Demo { //derived class default constructor Prototype() { this('Java', 'Python'); System.out.println('Derived class default constructor called'); } //derived class parameterized constructor Prototype(String str1, String str2) { super(); System.out.println('Derived class parameterized constructor called'); } } public class ConstructorChaining { //main method public static void main(String args[]) { //initializes the instance of example class Prototype my_example = new Prototype(); } } 

Produktion:

Vad är constructor chaining i Java