Objektorienteeritud programmeerimisel on konstruktor erifunktsioon, mille kutsute objekti loomiseks. Konstruktoritel on mitu ainulaadset omadust, mis võimaldavad neil töötada.

Javas nimetate konstruktorit selle klassi järgi. Konstruktor on meetod, mis on määratletud klassis, millele see kehtib. Java-konstruktorid võivad alternatiivse käitumise tagamiseks kasutada ülekoormust. Java konstruktorid saavad koodi taaskasutamiseks kasutada ka pärandit.

Miks vajate ikkagi konstruktoreid?

Konstruktorid on tugisammas objektorienteeritud programmeerimineja Java pole erand. See näide näitab, kuidas saate määratleda ühe ringi atribuudi ja ühe meetodiga põhiklassi Circle.

avaliku klassi ring {
avalik topeltraadius;
avalik kahekordne ala () {tagasitulek 3.14159 * raadius * raadius; }
}

Seejärel saate selle klassi eksemplari luua ja sellega suhelda.

Ring c = uus ring ();
c.raadius = 2;
System.out.println (c. Ala ()); // 12.56636

Kuid see on vähem mugav ja vastupidav kui võiks. Hea objektorienteeritud tava on andmed kapseldada, kaitstes neid volitamata juurdepääsu eest:

avaliku klassi ring {
privaatne topeltraadius;
avalik kahekordne ala () {tagasitulek 3.14159 * raadius * raadius; }
public void setRadius (topelt r) {raadius = r; }
}

Nüüd saab helistamiskood kasutada setRadius meetodit ja ei pea muretsema selle rakendamise üksikasjade pärast:

Ring c = uus ring ();
c.setRadius (2);

Konstruktorid pakuvad objektile andmete loomisel veelgi paremat viisi andmete edastamiseks. Neid kasutatakse väga sageli omaduste, näiteks raadius siin.

Lihtsate konstruktorite näited

Kõige elementaarsem konstruktor on argumentideta, mis ei tee midagi:

avaliku klassi ring {
avalik ring () {}
}

Vaata ka: Siit saate teada, kuidas Java-klassid luua

Kui te ei määra konstruktorit, pakub Java vaikimisi samamoodi käituvat.

Pange tähele paari asja:

  1. Konstruktori nimi vastab klassi nimele.
  2. See konstruktor kasutab avalik juurdepääsu modifikaator, nii et mõni muu kood saab sellele helistada.
  3. Konstruktor ei sisalda tagasituleku tüüpi. Erinevalt teistest meetoditest ei saa konstruktorid väärtust tagastada.

Konstruktorid teostavad tavaliselt mingisugust initsialiseerimist. Pange tähele, et ülaltoodud kood ei lähtesta raadiuse väärtust. Sellisel juhul määrab keel selle automaatselt nulli. See klass eeldab, et kasutaja seda kasutab setRadius (). Kasulikuma vaikeväärtuse kui 0 kasutamiseks peate selle konstruktoris määrama:

avaliku klassi ring {
avalik ring () {raadius = 1; }
}

Selle klassiga loodud suhtlusringidel on vähemalt nüüd tegelik ala! Helistaja saab endiselt kasutada setRadius () anda muu kui 1 raadius. Kuid konstruktor võib olla veelgi sõbralikum:

avaliku klassi ring {
avalik ring (topelt r) {raadius = r; }
}

Nüüd saate luua konkreetse raadiusega ringe alates sünnist:

Ring c = uus ring (2);
System.out.println (c. Ala ()); // 12.56636

See on konstruktorite jaoks väga levinud kasutusviis. Sageli kasutate neid muutujate lähtestamiseks parameetriväärtusteks.

Konstruktori ülekoormus

Klassi definitsioonis saate määrata mitu konstruktorit:

avalik ring () {raadius = 1; }
avalik ring (topelt r) {raadius = r; }

See annab helistamiskoodile valiku objektide koostamise kohta:

Ring c1 = uus ring (2);
Ring c2 = uus ring ();
System.out.println (c1.area () + "," + c2.area ()); // 12.56636, 3.14159

Pisut keerukama ringi abil saate uurida huvitavamaid konstruktoreid. See versioon salvestab oma positsiooni:

avaliku klassi ring {
avalik topelt x, y, raadius;
avalik ring () {raadius = r; }
avalik ring (topelt r) {raadius = r; }
avalik ring (kahekordne x, topelt y, topelt r) {
see.x = x; see.y = y; raadius = r;
}

avalik kahekordne ala () {tagasitulek 3.14159 * raadius * raadius; }
}

Nüüd saate luua ringi ilma argumentideta, ühe raadiusega või raadiuse kõrval x ja y koordinaatidega. See on samasugune ülekoormus, mida Java toetab mis tahes meetodi jaoks.

Konstruktori ketid

Kuidas oleks ühe ringi loomisega teise põhjal? See annaks meile võimaluse ringe hõlpsalt kopeerida. Järgige järgmist plokki:

avalik ring (ring c) {
see.x = c.x;
see.y = c.y;
see.raadius = c.raadius;
}

See töötab, kuid see kordab mõnda koodi asjatult. Kuna klassil Circle on juba konstruktor, mis tegeleb üksikute omadustega, saate seda selle asemel helistada seda märksõna:

avalik ring (ring c) {
see (cx, cyy, c.radius);
}

See on üks konstruktori aheldamise vorm, mis kutsub üht konstruktorit teisest. See kasutab vähem koodi ja aitab toimingu tsentraliseerida, mitte dubleerida.

Vanemkonstruktorile helistamine

Konstruktori aheldamise teine ​​vorm tekib siis, kui konstruktor kutsub oma vanema klassi konstruktori. See võib olla kas otsene või kaudne. Vanemkonstruktori selgesõnaliseks kutsumiseks kasutage Super märksõna:

super (x, y);

Kujutage ette, et kuju laps töötab ringi vanemana:

avaliku klassi kuju {
topelt x, y;
avalik kuju (topelt _x, topelt _y) {x = _x; y = _y; }
}

See tegeleb kõigi kujundite ühise positsioneerimisega, kuna see on funktsioon, mida nad kõik jagavad. Nüüd saab klass Circle positsiooni käitlemise oma vanemale delegeerida:

avalik klass Ring laiendab Kuju {
topeltraadius;
avalik ring (topelt r) {super (0, 0); raadius = r; }
avalik ring (kahekordne x, topelt y, topelt r) {
super (x, y);
raadius = r;
}
}

Superklassi ehitus on selle väga oluline aspekt pärand Java-s. Keel täidab seda vaikimisi, kui te selgesõnaliselt ei helista Super oma konstruktorites.

Konstruktorite juurdepääsu modifikaatorid

Ehitajad võivad oma allkirjaga lisada juurdepääsu modifikaatori. Nagu muud meetodid, määratleb see ka seda, millised helistajad saavad konstruktorile juurde pääseda:

avaliku klassi test {
privaatne staatiline test uniqueInstance = uus test ();
privaatne test () {}
avalik staatiline test getInstance () {
return unikaalne;
}
}

See on keerulisem näide, nii et hoolitsege selle mõistmise eest:

  • Klass ei ole abstraktne, seega on sellest võimalik instantsida.
  • Konstruktor on privaatne, nii et ainult see klass ise saab uue eksemplari luua.
  • Staatilise omaduse ja meetodi kaudu paljastab klass helistajatele ühe ainulaadse eksemplari.

Objektide loomiseks kasutage Java-s Konstruktorid

Konstruktorid on objektorienteeritud programmeerimise jaoks üliolulised. Need võimaldavad teil luua objekte, mis on hädavajalik!

Javas näevad konstruktorid välja nagu teised meetodid ja töötavad umbes samamoodi. Peaksite meeles pidama erieeskirju vaikekonstruktorite, ülekoormuse ja konstruktorite aheldamise kohta. Kui konstruktorid on teie jaoks uued, võiksite tutvuda teiste Java-põhimõistetega, mida peaksite alustamise ajal õppima.

E-post
10 Java-põhikontseptsiooni, mida peaksite alustades õppima

Ükskõik, kas kirjutate GUI-d, arendate serveripoolset tarkvara või Androidi kasutavat mobiilirakendust, on Java õppimine teile kasulik. Siin on mõned Java põhimõisted, mis aitavad teil alustada.

Loe edasi

Seotud teemad
  • Programmeerimine
  • Java
  • Kodeerimise näpunäited
Autori kohta
Bobby Jack (51 artiklit on avaldatud)

Bobby on tehnoloogiaentusiast, kes töötas tarkvaraarendajana peaaegu kaks aastakümmet. Ta on kirglik mängude vastu, töötab Switch Player Magazine'is arvustuste redaktorina ning on süvenenud veebipõhise avaldamise ja veebiarenduse kõigisse aspektidesse.

Veel Bobby Jackilt

Telli meie uudiskiri

Liituge meie uudiskirjaga, kus leiate tehnilisi näpunäiteid, ülevaateid, tasuta e-raamatuid ja eksklusiivseid pakkumisi!

Veel üks samm !!!

Palun kinnitage oma e-posti aadress meilis, mille me just saatsime.

.