Bij objectgeoriënteerd programmeren is een constructor een speciale functie die u aanroept om een ​​object te maken. Constructeurs hebben verschillende unieke eigenschappen waardoor ze kunnen werken.

In Java noem je een constructor naar zijn klasse. Een constructor is een methode, gedefinieerd in de klasse waarop deze van toepassing is. Java-constructors kunnen overbelasting gebruiken om alternatief gedrag te bieden. Constructeurs in Java kunnen ook gebruikmaken van overerving om code opnieuw te gebruiken.

Waarom heb je eigenlijk constructeurs nodig?

Constructeurs zijn een steunpilaar van object georiënteerd programmeren, en Java is geen uitzondering. Dit voorbeeld laat zien hoe u een basisklasse Circle kunt definiëren met één gegevenseigenschap en één methode:

openbare klas Cirkel {
openbare dubbele straal;
public double area() { return 3.14159 * radius * radius; }
}

U kunt dan een instantie van deze klasse maken en ermee communiceren:

Cirkel c = nieuwe cirkel();
c.straal = 2;
Systeem.uit.println (c.area()); // 12.56636

Maar dit is minder handig en robuust dan het zou kunnen zijn. Het is een goede objectgeoriënteerde praktijk om gegevens in te kapselen en deze te beschermen tegen ongeautoriseerde toegang:

openbare klas Cirkel {
privaat dubbele straal;
public double area() { return 3.14159 * radius * radius; }
public void setRadius (dubbele r) {straal = r; }
}

Nu kan de belcode de. gebruiken setRadius methode en hoeft u zich geen zorgen te maken over de implementatiedetails:

Cirkel c = nieuwe cirkel();
c.setRadius (2);

Constructors bieden een nog betere manier om gegevens aan een object te leveren wanneer u het maakt. Ze worden heel vaak gebruikt voor de initialisatie van eigenschappen, zoals de straal hier.

Voorbeelden van eenvoudige constructors

De meest elementaire constructor is er een zonder argumenten, die niets doet:

openbare klas Cirkel {
openbare kring() {}
}

Zie ook: Leer hoe u klassen in Java kunt maken

Als u geen constructor definieert, biedt Java een standaardconstructor die zich op dezelfde manier gedraagt.

Let op een paar dingen:

  1. De naam van de constructor komt overeen met de klassenaam.
  2. Deze constructor gebruikt de openbaar access modifier, zodat elke andere code het kan noemen.
  3. Een constructor bevat geen retourtype. In tegenstelling tot andere methoden kunnen constructeurs geen waarde retourneren.

Constructors voeren meestal een soort initialisatie uit. Merk op dat de bovenstaande code de waarde van straal niet initialiseert. In dit geval zal de taal deze automatisch op nul zetten. Deze klasse verwacht dat een gebruiker setRadius(). Om een ​​bruikbare standaardwaarde dan 0 te gebruiken, kunt u deze binnen de constructor toewijzen:

openbare klas Cirkel {
openbare cirkel() { straal = 1; }
}

Kringen die met deze klasse zijn gemaakt, hebben nu in ieder geval een echt gebied! De beller kan nog steeds gebruiken setRadius() om een ​​andere straal dan 1 op te geven. Maar de constructor kan nog vriendelijker zijn:

openbare klas Cirkel {
openbare cirkel (dubbele r) { straal = r; }
}

Nu kunt u vanaf de geboorte cirkels maken met een specifieke straal:

Cirkel c = nieuwe cirkel (2);
Systeem.uit.println (c.area()); // 12.56636

Dit is een veelgebruikt gebruik voor constructeurs. U zult ze vaak gebruiken om variabelen te initialiseren tot parameterwaarden.

Constructor overbelasting

U kunt meer dan één constructor in een klassendefinitie opgeven:

openbare cirkel() { straal = 1; }
openbare cirkel (dubbele r) { straal = r; }

Dit geeft aanroepende code een keuze voor het construeren van objecten:

Cirkel c1 = nieuwe cirkel (2);
Cirkel c2 = nieuwe cirkel();
System.out.println (c1.area() + ", " + c2.area()); // 12.56636, 3.14159

Met een iets complexere Circle kun je interessantere constructors verkennen. Deze versie slaat zijn positie op:

openbare klas Cirkel {
openbare dubbel x, y, straal;
openbare cirkel() { straal = r; }
openbare cirkel (dubbele r) { straal = r; }
openbare cirkel (dubbele x, dubbele y, dubbele r) {
dit.x = x; dit.y = y; straal = r;
}

public double area() { return 3.14159 * radius * radius; }
}

U kunt nu een cirkel maken zonder argumenten, een enkele straal of x- en y-coördinaten naast de straal. Dit is dezelfde soort overbelasting die Java voor elke methode ondersteunt.

Constructor Chaining

Hoe zit het met het creëren van een cirkel, gebaseerd op een andere? Dit zou ons de mogelijkheid geven om cirkels gemakkelijk te kopiëren. Let op het volgende blok:

openbare cirkel (cirkel c) {
dit.x = c.x;
dit.y = c.y;
deze.straal = c.straal;
}

Dit zal werken, maar het herhaalt een aantal code onnodig. Omdat de klasse Circle al een constructor heeft die de individuele eigenschappen afhandelt, kun je die in plaats daarvan aanroepen met de dit trefwoord:

openbare cirkel (cirkel c) {
dit (c.x, c.y, c.radius);
}

Dit is een vorm van constructor chaining, waarbij de ene constructor van de andere wordt aangeroepen. Het gebruikt minder code en helpt bij het centraliseren van een bewerking in plaats van deze te dupliceren.

De ouderconstructeur bellen Call

De andere vorm van constructor-chaining treedt op wanneer een constructor een constructor van zijn bovenliggende klasse aanroept. Dit kan zowel expliciet als impliciet zijn. Gebruik de om een ​​bovenliggende constructor expliciet aan te roepen super trefwoord:

super (x, y);

Stel je een Shape-klasse voor die optreedt als de ouder van de cirkel:

openbare klasse Vorm {
dubbele x, y;
openbare vorm (dubbele _x, dubbele _y) { x = _x; y = _y; }
}

Het behandelt een gemeenschappelijke positionering voor alle vormen, omdat dit functionaliteit is die ze allemaal delen. Nu kan de Circle-klasse het afhandelen van posities delegeren aan zijn ouder:

openbare klas Circle breidt vorm uit {
dubbele straal;
openbare cirkel (dubbele r) { super (0, 0); straal = r; }
openbare cirkel (dubbele x, dubbele y, dubbele r) {
super (x, y);
straal = r;
}
}

Superklasse constructie is een zeer belangrijk aspect van erfenis in Java. De taal dwingt het standaard af als je niet expliciet belt super in uw constructeurs.

Toegang tot modifiers op constructors

Constructeurs kunnen een toegangsmodifier in hun handtekening opnemen. Net als andere methoden definieert dit welke typen beller toegang hebben tot de constructor:

openbare klasse Test {
privé statisch Test uniqueInstance = new Test();
privé-test() { }
openbare statische Test getInstance() {
return uniqueInstance;
}
}

Dit is een ingewikkelder voorbeeld, dus zorg ervoor dat u het begrijpt:

  • De klasse is niet abstract, dus het is mogelijk om er een instantie van te maken.
  • De constructor is privé, dus alleen deze klasse zelf kan een nieuwe instantie maken.
  • Via een statische eigenschap en methode stelt de klasse een enkele, unieke instantie van zichzelf bloot aan bellers.

Constructors in Java gebruiken om objecten te maken

Constructors zijn essentieel voor objectgeoriënteerd programmeren. Hiermee kunt u objecten maken, wat essentieel is!

In Java lijken constructors op andere methoden en werken ze op vrijwel dezelfde manier. Onthoud de speciale regels rond standaardconstructors, overbelasting en constructor-chaining. Als constructors nieuw voor je zijn, wil je misschien wat meer lezen over de andere Java-kernconcepten die je moet leren als je aan de slag gaat.

E-mail
10 belangrijkste Java-concepten die u moet leren als u aan de slag gaat

Of u nu een GUI schrijft, server-side software ontwikkelt of een mobiele applicatie met Android gebruikt, het leren van Java zal u goed van pas komen. Hier zijn enkele Java-kernconcepten om u op weg te helpen.

Lees volgende

Gerelateerde onderwerpen
  • Programmeren
  • Java
  • Codeertips
Over de auteur
Bobby Jack (51 artikelen gepubliceerd)

Bobby is een technologie-enthousiasteling die bijna twee decennia als softwareontwikkelaar heeft gewerkt. Hij is gepassioneerd door gaming, werkt als recensie-editor bij Switch Player Magazine en is ondergedompeld in alle aspecten van online publiceren en webontwikkeling.

Meer van Bobby Jack

Abonneer op onze nieuwsbrief

Word lid van onze nieuwsbrief voor technische tips, recensies, gratis e-boeken en exclusieve deals!

Nog een stap…!

Bevestig uw e-mailadres in de e-mail die we u zojuist hebben gestuurd.

.