Constructor chaining in Java is gewoon de handeling van een constructor die een andere constructor aanroept via overerving. Dit gebeurt impliciet wanneer een subklasse wordt geconstrueerd: de eerste taak is om de constructormethode van de ouder aan te roepen. Maar programmeurs kunnen ook een andere constructor aanroepen met behulp van de sleutelwoorden deze() of super(). De deze() trefwoord roept een andere overbelaste constructor in dezelfde klasse aan; de super() trefwoord roept een niet-standaard constructor aan in een superklasse.
Constructor chaining vindt plaats door het gebruik van overerving. De eerste taak van een subklasse constructormethode is de constructormethode van zijn superklasse aan te roepen. Dit zorgt ervoor dat het maken van het subklasseobject begint met de initialisatie van de klassen erboven in de overervingsketen.
Er kan een willekeurig aantal klassen in een overervingsketen zijn. Elke constructormethode roept de keten op totdat de klasse bovenaan is bereikt en geïnitialiseerd. Vervolgens wordt elke volgende klasse hieronder geïnitialiseerd terwijl de ketting terugloopt naar de oorspronkelijke subklasse. Dit proces wordt constructor chaining genoemd.
Let daar op:
Beschouw deze superklasse Animal uitgebreid door Mammal:
klasse dier
// constructeur
Dier()
System.out.println ("We zitten in de constructor van de klas Animal.");
klasse Zoogdier verlengt dier
// constructor
Zoogdier()
System.out.println ("We zitten in de constructor van Mammal.");
Laten we nu de klasse Zoogdier instantiëren:
openbare klasse ChainingConstructors
/ **
* @param args
* /
public static void main (String [] args)
Mammal m = new Mammal ();
Wanneer het bovenstaande programma wordt uitgevoerd, activeert Java impliciet een aanroep naar de constructeur van de superklasse Animal en vervolgens naar de constructor van de klasse. De output zal daarom zijn:
We zitten in de constructeur van klasse Animal
We zitten in de aannemer van klasse Mammal
Expliciet gebruik van de deze() of super() met trefwoorden kunt u een niet-standaardconstructor aanroepen.
Merk op dat de aanroep naar een andere constructor de eerste instructie in de constructor moet zijn, anders zal Java een compilatiefout veroorzaken.
Beschouw de onderstaande code waarin een nieuwe subklasse, Carnivore, erft van de klasse Mammal die erft van de klasse Animal, en elke klasse heeft nu een constructor die een argument aanneemt.
Hier is de superklasse Animal:
openbare klasse dierMerk op dat de constructor nu een neemt naam van het type Draad als parameter en dat de body van de klasse aanroept deze() op de constructeur. Zonder het expliciete gebruik van deze naam, Java zou een standaard, no-args constructor maken en dat in plaats daarvan aanroepen.
private String naam;
public Animal (tekenreeksnaam) // constructor met een argument
this.name = name;
System.out.println ("Ik word eerst uitgevoerd.");
Hier is de subklasse Mammal:
public class Mammal breidt dier
public Mammal (tekenreeksnaam)
super (naam);
System.out.println ("Ik word als tweede uitgevoerd");
De constructeur neemt ook een argument en het gebruikt super (naam) om een specifieke constructor in zijn superklasse aan te roepen.
Hier is nog een subklasse Carnivore. Dit erft van Mammal:
public class Carnivore breidt zoogdier
public Carnivore (tekenreeksnaam)
super (naam);
System.out.println ("Ik ben het laatst geëxecuteerd");
Wanneer uitgevoerd, zouden deze drie codeblokken worden afgedrukt:
Ik word eerst geëxecuteerd.
Ik word als tweede geëxecuteerd.
Ik ben als laatste geëxecuteerd.
Samenvatten: Wanneer een instantie van de Carnivore-klasse wordt gemaakt, is de eerste actie van de constructormethode de methode Mammal constructor aan te roepen. Evenzo is de eerste actie van de constructiemethode voor zoogdieren de methode Animal constructor aan te roepen. Een aanroep van een constructormethode zorgt ervoor dat de instantie van het Carnivore-object alle klassen in zijn overervingsketen correct heeft geïnitialiseerd.