I objektorientert programmering er en konstruktør en spesiell funksjon som du kaller for å lage et objekt. Konstruktører har flere unike funksjoner som gjør dem i stand til å jobbe.

I Java kaller du en konstruktør etter klassen. En konstruktør er en metode, definert i klassen den gjelder for. Java-konstruktører kan bruke overbelastning for å gi alternativ oppførsel. Konstruktører i Java kan også bruke arv til å gjenbruke kode.

Hvorfor trenger du konstruksjoner uansett?

Konstruktører er en bærebjelke i Objektorientert programmering, og Java er ikke noe unntak. Dette eksemplet viser hvordan du kan definere en grunnleggende sirkelklasse med én dataegenskap og en metode:

offentlig klassesirkel {
offentlig dobbel radius;
offentlig dobbeltområde () {retur 3.14159 * radius * radius; }
}

Du kan deretter opprette en forekomst av denne klassen og samhandle med den:

Sirkel c = ny Sirkel ();
c.radius = 2;
System.out.println (c.area ()); // 12.56636

Men dette er mindre praktisk og robust enn det kunne være. Det er god objektorientert praksis å kapsle inn data og beskytte dem mot uautorisert tilgang:

offentlig klassesirkel {
privat dobbel radius;
offentlig dobbeltområde () {retur 3.14159 * radius * radius; }
public void setRadius (dobbel r) {radius = r; }
}

Nå kan ringekoden bruke setRadius metoden og ikke trenger å bekymre deg for implementeringsdetaljer:

Sirkel c = ny Sirkel ();
c.setRadius (2);

Konstruktører tilbyr en enda bedre måte å levere data til et objekt når du lager det. De brukes ofte til initialisering av egenskaper, for eksempel radius her.

Eksempler på enkle konstruktører

Den mest grunnleggende konstruktøren er en uten argumenter, som ikke gjør noe:

offentlig klassesirkel {
offentlig sirkel () {}
}

Se også: Lær hvordan du lager klasser i Java

Hvis du ikke definerer en konstruktør, vil Java tilby en standard som oppfører seg på samme måte.

Legg merke til et par ting:

  1. Navnet på konstruktøren samsvarer med klassenavnet.
  2. Denne konstruktøren bruker offentlig tilgangsmodifikator, slik at enhver annen kode kan kalle det.
  3. En konstruktør inkluderer ikke en returtype. I motsetning til andre metoder, kan ikke konstruktører returnere en verdi.

Konstruktører utfører vanligvis en slags initialisering. Merk at koden ovenfor ikke initialiserer verdien av radius. I dette tilfellet vil språket automatisk sette det til null. Denne klassen forventer at en bruker skal bruke setRadius (). For å bruke en mer nyttig standard enn 0, kan du tilordne den i konstruktøren:

offentlig klassesirkel {
offentlig sirkel () {radius = 1; }
}

Sirkler opprettet med denne klassen vil i det minste nå ha et faktisk område! Innringeren kan fortsatt bruke setRadius () å gi en annen radius enn 1. Men konstruktøren kan være enda vennligere:

offentlig klassesirkel {
offentlig sirkel (dobbel r) {radius = r; }
}

Nå kan du opprette sirkler med en bestemt radius helt fra fødselen:

Sirkel c = ny Sirkel (2);
System.out.println (c.area ()); // 12.56636

Dette er en veldig vanlig bruk for konstruktører. Du vil ofte bruke dem til å initialisere variabler til parameterverdier.

Overbelastning av konstruktør

Du kan spesifisere mer enn en konstruktør i en klassedefinisjon:

offentlig sirkel () {radius = 1; }
offentlig sirkel (dobbel r) {radius = r; }

Dette gir ringekoden et valg om hvordan du konstruerer objekter:

Sirkel c1 = ny Sirkel (2);
Sirkel c2 = ny Sirkel ();
System.out.println (c1.area () + "," + c2.area ()); // 12.56636, 3.14159

Med en litt mer kompleks sirkel kan du utforske mer interessante konstruktører. Denne versjonen lagrer sin posisjon:

offentlig klassesirkel {
offentlig dobbeltrom x, y, radius;
offentlig sirkel () {radius = r; }
offentlig sirkel (dobbel r) {radius = r; }
offentlig sirkel (dobbel x, dobbel y, dobbel r) {
this.x = x; this.y = y; radius = r;
}

offentlig dobbeltområde () {retur 3.14159 * radius * radius; }
}

Du kan nå opprette en sirkel uten argumenter, en enkelt radius eller x- og y-koordinater ved siden av radiusen. Dette er den samme typen overbelastning som Java støtter for enhver metode.

Konstruktorkjetting

Hva med å lage en sirkel, basert på en annen? Dette vil gi oss muligheten til å kopiere sirkler enkelt. Følg følgende blokkering:

public Circle (Circle c) {
this.x = c.x;
this.y = c.y;
denne.radius = c.radius;
}

Dette vil fungere, men det gjentar noe kode unødvendig. Siden Circle-klassen allerede har en konstruktør som håndterer de enkelte egenskapene, kan du i stedet ringe det ved å bruke dette nøkkelord:

public Circle (Circle c) {
dette (c.x, c.y, c.radius);
}

Dette er en form for konstruktorkjetting, som kaller en konstruktør fra en annen. Den bruker mindre kode og hjelper til med å sentralisere en operasjon i stedet for å duplisere den.

Ringer til foreldrekonstruktøren

Den andre formen for konstruktorkjetting oppstår når en konstruktør kaller en konstruktør i sin overordnede klasse. Dette kan være enten eksplisitt eller implisitt. For å ringe en foreldrekonstruktør eksplisitt, bruk super nøkkelord:

super (x, y);

Tenk deg en formklasse som fungerer som sirkelens forelder:

offentlig klasse Shape {
dobbel x, y;
offentlig figur (dobbel _x, dobbel _y) {x = _x; y = _y; }
}

Den håndterer vanlig posisjonering for alle former, siden dette er funksjonalitet de alle deler. Nå kan Circle-klassen delegere posisjonshåndtering til sin forelder:

offentlig klasse Circle utvider Shape {
dobbel radius;
offentlig sirkel (dobbel r) {super (0, 0); radius = r; }
offentlig sirkel (dobbel x, dobbel y, dobbel r) {
super (x, y);
radius = r;
}
}

Superklassekonstruksjon er et veldig viktig aspekt av arv i Java. Språket håndhever det som standard hvis du ikke eksplisitt ringer super i dine konstruktører.

Få tilgang til modifikatorer på konstruktører

Konstruktører kan inkludere en tilgangsmodifikator i signaturen. Som andre metoder, definerer dette hvilke typer innringer som har tilgang til konstruktøren:

offentlig klassetest {
privat statisk test unikInstans = ny test ();
privat test () {}
offentlig statisk test getInstance () {
retur unikInstans;
}
}

Dette er et mer komplisert eksempel, så pass på å forstå det:

  • Klassen er ikke abstrakt, så det er mulig å instantiere fra den.
  • Konstruktøren er privat, så bare denne klassen selv kan opprette en ny forekomst.
  • Via en statisk egenskap og metode utsetter klassen en enkelt, unik forekomst av seg selv for innringere.

Bruk konstruktører i Java til å lage objekter

Konstruktører er viktige for objektorientert programmering. De lar deg lage objekter, noe som er viktig!

I Java ser konstruktører ut som andre metoder og fungerer på samme måte. Du bør huske de spesielle reglene rundt standardkonstruktører, overbelastning og konstruktorkjetting. Hvis konstruktører er nye for deg, kan det være lurt å lese om de andre kjerne-Java-konseptene du bør lære når du begynner.

E-post
10 Core Java-konsepter du bør lære når du kommer i gang

Enten du skriver et GUI, utvikler serverprogramvare eller en mobilapplikasjon som bruker Android, vil læring av Java tjene deg godt. Her er noen av de viktigste Java-konseptene som hjelper deg i gang.

Les Neste

Relaterte temaer
  • Programmering
  • Java
  • Kodingstips
Om forfatteren
Bobby Jack (51 artikler publisert)

Bobby er en teknologientusiast som jobbet som programvareutvikler i det meste av to tiår. Han brenner for spill, jobber som Reviews Editor i Switch Player Magazine, og er fordypet i alle aspekter av online publisering og nettutvikling.

Mer fra Bobby Jack

Abonner på vårt nyhetsbrev

Bli med på nyhetsbrevet vårt for tekniske tips, anmeldelser, gratis e-bøker og eksklusive tilbud!

Ett steg til…!

Bekreft e-postadressen din i e-posten vi nettopp sendte deg.

.