Į objektinį programavimą konstruktorius yra speciali funkcija, kurią iškviečiate norėdami sukurti objektą. Konstruktoriai turi keletą unikalių savybių, leidžiančių jiems dirbti.
„Java“ sistemoje jūs pavadinate konstruktorių pagal jo klasę. Konstruktorius yra metodas, apibrėžtas klasėje, kuriai jis taikomas. „Java“ konstruktoriai gali naudoti perkrovą, kad užtikrintų alternatyvų elgesį. „Java“ konstruktoriai taip pat gali naudoti paveldėjimą naudodami kodą pakartotinai.
Kodėl vis tiek reikalingi konstruktoriai?
Konstruktoriai yra pagrindinis Objektinis programavimas, o „Java“ nėra išimtis. Šis pavyzdys parodo, kaip galite apibrėžti pagrindinę rato klasę su viena duomenų ypatybe ir vienu metodu:
viešosios klasės ratas {
viešas dvigubas spindulys;
viešoji dviguba sritis () {grįžti 3,14159 * spindulys * spindulys; }
}
Tada galite sukurti šios klasės egzempliorių ir su juo bendrauti:
Apskritimas c = naujas apskritimas ();
c. spindulys = 2;
System.out.println (c. Plotas ()); // 12.56636
Bet tai yra mažiau patogu ir tvirta, nei galėtų būti. Tinkama objektyvi praktika kaupti duomenis, apsaugant juos nuo neteisėtos prieigos:
viešosios klasės ratas {
privatus dvigubas spindulys;
viešoji dviguba sritis () {grįžti 3,14159 * spindulys * spindulys; }
public void setRadius (double r) {radius = r; }
}
Dabar skambinimo kodas gali naudoti setRadius metodas ir nereikia jaudintis dėl jo įgyvendinimo detalių:
Apskritimas c = naujas apskritimas ();
c.setRadius (2);
Konstruktoriai siūlo dar geresnį duomenų teikimo objektui būdą, kai jį kuriate. Jie labai dažnai naudojami inicijuojant savybes, tokias kaip spindulys čia.
Paprastų konstruktorių pavyzdžiai
Pats pagrindinis konstruktorius yra tas, kuriame nėra jokių argumentų, kuris nieko nedaro:
viešosios klasės ratas {
viešasis ratas () {}
}
Taip pat žiūrėkite: Sužinokite, kaip kurti klases „Java“
Jei nenurodysite konstruktoriaus, „Java“ pateiks numatytąjį, kuris elgsis taip pat.
Atkreipkite dėmesį į keletą dalykų:
- Konstruktoriaus vardas atitinka klasės pavadinimą.
- Šis konstruktorius naudoja visuomenės prieigos modifikatorius, todėl bet kuris kitas kodas gali jį iškviesti.
- Konstruktorius neapima grąžinimo tipo. Skirtingai nuo kitų metodų, konstruktoriai negali grąžinti vertės.
Konstruktoriai paprastai atlieka tam tikrą inicijavimą. Atminkite, kad aukščiau pateiktas kodas neinicijuoja spindulio vertės. Tokiu atveju kalba automatiškai nustatys nulį. Ši klasė tikisi, kad vartotojas ją naudos setRadius (). Norėdami naudoti naudingesnį numatytąjį nei 0, galite jį priskirti konstruktoriui:
viešosios klasės ratas {
viešasis ratas () {spindulys = 1; }
}
Draugai, sukurti šioje klasėje, bent jau dabar turės faktinį plotą! Skambinantysis vis tiek gali naudotis setRadius () suteikti kitokį nei 1 spindulį. Tačiau konstruktorius gali būti dar draugiškesnis:
viešosios klasės ratas {
viešasis ratas (dvigubas r) {spindulys = r; }
}
Dabar nuo pat gimimo galite kurti konkretaus spindulio apskritimus:
Apskritimas c = naujas apskritimas (2);
System.out.println (c. Plotas ()); // 12.56636
Tai labai dažnas konstruktorių naudojimas. Dažnai juos naudosite, norėdami inicijuoti kintamuosius pagal parametrų vertes.
Konstruktoriaus perkrova
Klasės apibrėžime galite nurodyti daugiau nei vieną konstruktorių:
viešasis ratas () {spindulys = 1; }
viešasis ratas (dvigubas r) {spindulys = r; }
Tai suteikia skambinimo kodui galimybę pasirinkti, kaip konstruoti objektus:
Apskritimas c1 = naujas apskritimas (2);
Apskritimas c2 = naujas apskritimas ();
System.out.println (c1.area () + "," + c2.area ()); // 12.56636, 3.14159
Turėdami šiek tiek sudėtingesnį ratą, galite tyrinėti įdomesnius konstruktorius. Ši versija išsaugo savo poziciją:
viešosios klasės ratas {
viešas dvigubas x, y, spindulys;
viešasis ratas () {spindulys = r; }
viešasis ratas (dvigubas r) {spindulys = r; }
viešasis ratas (dvigubas x, dvigubas y, dvigubas r) {
tai.x = x; tai.y = y; spindulys = r;
}
viešoji dviguba sritis () {grįžti 3,14159 * spindulys * spindulys; }
}
Dabar galite sukurti apskritimą be jokių argumentų, vieno spindulio arba x ir y koordinačių šalia spindulio. Tai yra tas pats perkrovimas, kurį „Java“ palaiko bet kuriam metodui.
Konstruktoriaus grandinės
Kaip sukurti vieną ratą, pagrįstą kitu? Tai suteiktų mums galimybę lengvai kopijuoti draugų ratus. Atkreipkite dėmesį į šį bloką:
viešasis ratas (apskritimas c) {
tai.x = c.x;
tai.y = c.y;
this.radius = c.radius;
}
Tai veiks, bet jis be reikalo pakartoja tam tikrą kodą. Kadangi „Circle“ klasėje jau yra konstruktorius, tvarkantis atskiras ypatybes, galite tai paskambinti naudodami tai raktinis žodis:
viešasis ratas (apskritimas c) {
tai (cx, cy, c.radiusas);
}
Tai yra viena iš konstruktorių grandinių formų, vadinanti vieną konstruktorių iš kito. Jis naudoja mažiau kodo ir padeda centralizuoti operaciją, o ne kopijuoti.
Skambinimas tėvų konstruktoriui
Kita konstruktoriaus grandinės forma atsiranda, kai konstruktorius paskambina savo tėvų klasės konstruktoriui. Tai gali būti aiški arba netiesioginė. Norėdami aiškiai paskambinti pagrindiniam konstruktoriui, naudokite super raktinis žodis:
super (x, y);
Įsivaizduokite, kad „Shape“ klasė veikia kaip būrelio tėvai:
visuomenės klasės forma {
dvigubas x, y;
vieša forma (dviguba _x, dviguba _y) {x = _x; y = _y; }
}
Jis tvarko bendrą visų formų padėties nustatymą, nes tai yra jų visų funkcionalumas. Dabar „Circle“ klasė gali perduoti pozicijos tvarkymą savo tėvams:
visuomenės klasės ratas pratęsia Formą {
dvigubas spindulys;
viešasis ratas (dvigubas r) {super (0, 0); spindulys = r; }
viešasis ratas (dvigubas x, dvigubas y, dvigubas r) {
super (x, y);
spindulys = r;
}
}
„Superclass“ konstrukcija yra labai svarbus aspektas paveldėjimas Java. Kalba ją įgyvendina pagal numatytuosius nustatymus, jei aiškiai neskambinate super savo konstruktoriuose.
Konstruktorių prieigos modifikatoriai
Konstruktoriai gali pasirašyti prieigos modifikatorių. Kaip ir kiti metodai, tai apibrėžia, kurie skambintojo tipai gali pasiekti konstruktorių:
viešosios klasės testas {
privatus statinis testas uniqueInstance = naujas testas ();
privatus testas () {}
viešasis statinis bandymas getInstance () {
grąžinti unikalią instanciją;
}
}
Tai yra sudėtingesnis pavyzdys, todėl atkreipkite dėmesį į tai:
- Klasė nėra abstrakti, todėl iš jos galima akimirksniu.
- Konstruktorius yra privatus, todėl tik ši klasė gali sukurti naują egzempliorių.
- Naudodama statinę ypatybę ir metodą, klasė atskleidžia skambintojams vieną, unikalų egzempliorių.
Objektams kurti naudokite „Java“ konstruktorius
Konstruktoriai yra gyvybiškai svarbūs objektiniam programavimui. Jie leidžia kurti objektus, o tai yra būtina!
„Java“ konstruktoriai atrodo kaip kiti metodai ir veikia panašiai. Turėtumėte prisiminti specialias taisykles, susijusias su numatytaisiais konstruktoriais, perkrova ir konstruktorių grandinėmis. Jei konstruktoriai jums yra naujiena, galbūt norėsite perskaityti kitas pagrindines „Java“ sąvokas, kurias turėtumėte išmokti pradėdami.
Nesvarbu, ar rašote grafinę vartotojo sąsają, kuriate serverio programinę įrangą, ar mobilią programą, naudojančią „Android“, mokymasis „Java“ jums bus naudingas. Štai keletas pagrindinių „Java“ koncepcijų, kurios padės jums pradėti.
Skaitykite toliau
- Programavimas
- „Java“
- Kodavimo patarimai
Bobis yra technologijų entuziastas, kuris beveik du dešimtmečius dirbo programinės įrangos kūrėju. Jis aistringai žaidžia, dirba „Review Player“ žurnalo apžvalgų redaktoriumi ir yra pasinėręs į visus internetinės leidybos ir interneto kūrimo aspektus.
Užsiprenumeruokite mūsų naujienlaiškį
Prisijunkite prie mūsų naujienlaiškio, kuriame rasite techninių patarimų, apžvalgų, nemokamų el. Knygų ir išskirtinių pasiūlymų!
Dar vienas žingsnis…!
Prašome patvirtinti savo el. Pašto adresą el. Laiške, kurį jums ką tik išsiuntėme.