Sunteți pe pagina 1din 133
“ CAPrronuL 1 mypopucene ‘rang aif cw pean erie ta vor nba wk past elabor a MWg, Pests sue wet seop 8 esi a starlets iui dstinbeisk okeiven EEK, mse Geneon Lexgonge Seen Mn (OL). ee wal een be} oles se plato wenitats tind Real obras, Cempallogele tsyeorImbase pe Mota od interned yhitua, wit Gksorts Ean Lane faye OST} Tha lene een plore ET ese gn le saa cone tts tne (Genon asec Bosra CL), ea cman Fah aeeppovcnaldvtlest penis eats Finkle oleae Pe ang CL, ps vo rin erty set dl be 02 Tat, ogrecm asanidear ypc tre Jae [Hoa fenkjl [areriteeemesteesuume cy a ngewe leweute in Cr Ce fa, Cif hrereabe ela et, cleeial sets shaply de pute! ilemores eet terete. Su perms ot hibowtesfoburtl Tne sponds es, «ace ou yk unto sa froyeaits ear pos Lpkeenta ines Haul Cf ean cde somone ewoe aL e popaste ue pein naam Spier 9 psn prorasn senses The Gf learns sont ence ste perms age sw tensed dstrueln,euin Gp, cb nan ob apes ce ‘Eider de cnr slate e geaidyon, nal ob allaatr dia Ta. rns sora snag ov C= ue I spraseae oe rou maces pater, peezaes es opens contr po 8 Furete pri crate ee eae ‘0 catch ileresnnt peat dle cave got 6 ooh refennt pe taney sun uae pegs neni tr talc ceethntclce (late eu dale into de Tug), sh acts eee Seiden prin ene pot esc dase ate chaz (cate, co wr bb verperage cutee. Surputald dwlle ete fede Mieco rods uals Vw Shull Set dlpeni wan ssc, de su apo dee 3 proins tus eu Gingell eran. ith OB of ev eettadiae aw dir Tindale de progomar niga pe te econ ail tne nota ie apitolul 2 ILASE ST OBIECTE [pitate fasta de structure pogreelor in eye adele ort ete ele, Aga sone naa cpl poder, atest Vi daiveue ae cea oees ernie a tel Bap edie de Pee single yo ‘pent ves sre ca tran tabi ols sine de alta parle apart cae pot efetunte asup ie oil iy dane 8 lone leer de sap posira a due © Iie sane ice ote pny dernn operate nqnetie wea, wrgeoan x seacee fest span Ries cnt cli Pair un lat Ee al ela wb nei ton contac clseh msc serataea mole fit 9 cna acne detain ra ieeovslia’ de rogue documenta} aoa Tn prin dock mots eta nota ebul, aie rmpenttarsn ‘al uh platens (endl) nator ic fut fe wo deme i sve pith ete mse ade dnt rele poe ha os eat) 36 iz us Dt slags. Acasa tient cae nen hn ston ponte in tae se se leave le ei a ol Ya als naa cae ete gear yor ou Habe orca ‘iosk ete oe ponte de oh bie thal Dent ada Holub sani otsind ex oclals noma eb een costo aphsaren Pevlcenliney pe ur cvstracor ol asl, sett pati’ 6 pai sens pelle, Resa itn derlarito n ip a lane Beet we a a 1 la itt CAPITOLUL2. CLASES] ORMODE 2.1 Blementele componente ale unet clase (tae Bhaja sade ccs qr I ce tent dl sa i “rie yee menace a eget nee ibs ieL let ane coma ra cleo Tina sr oe siya sit sariel melo es Hse our eae ed ten ual ee dole ba cinglh dtd, ere wid tcolan ctl re, ge: poeta neovtcce peta veto exis pea ea ta ase Persoen { panile "a; /J ene nexerie parson paste string am; // umese pezsseno: pabite Pesaousa pevoche; // eumela cocslal/eptios pabite siete Long popalatia = 2a Vertobtle de exemplar i variebile de clands © decsaie de cing font ditevn reo tip, amet de rac eval of, epllnsh d enya tesndiasiare (Ginspurl GIP, ypececke wr exbla in Gti det de Up Pere Sah, Fleatol gece alae sartn un emeremea sacl de caen perce, ‘S408 campuel anos flaeate sure Ce earn Se ep Dede lt pats, cpl sepalseis, in decane crt spire etintsl fee arceie.:n mapary mobnrtee dase yuecsta den asst en su Clan ano nnigerenevnine. Anacapa ne aie eS ce tow bled a Tnjiaizator Clazle asinine seu sataetor) pot sense sou exjsit ce ip eicespuncter Upa enpal. Dao es expt nel stn pt spas ela, a nepal cbt abit ape Aemtrte ct coi ex oie etmp sa Ae dja mie iar ape a olde ost genie cera. Clem sso Inbar fe pe Huge weet i tne i anes a ink Compu J). EESWENTELE CoMpoNEr® ALS tiNet cLAsR sapte = 3.5 + 2: /1 oxpresi conszante aiisipee © septs; (/ erase cv ale camp aL observalas bieds'™ rock sixCtath P1/); / ape. dn notsdn fupe » eapea + tah set eiad6), Hexsronie conbinsta funicular orate baal Jar, et waa fle do pregraenra, aan sn tame de yt presi cas uo jn nextel de le ave tyke wedfrte au eal ent bet pale We oyse. abort, Sat, leap, Alaee, dovets, tpaleaacter char Hea wr pal. Toate sl sn epeseata neompksan Wenn en wemitaorle pec: apn lg gh douse yb § bil vabe cuprinse ate !25 3 et: 18 blk. lr cups nau 9.708 9h kare, fst 32d bili, sao caprine neo Mz ab | ATARI, fon: ls i ace aoa se ae 22873 008 864 776.18 Doarziac.sca rasan, Ibe: entre + racine, svn fol eel on nf nse Mk cau pagina sateen st freon, ae 20 a0 Yate ect sn sul By gg Ha oe phe anda FR S185 ie oie were Float se verethas po 88 de Uk ean 8 yond Bn, ia ele coat we spusnt po 64 de ifs cava MT pom Fit xponewul ste eopventss inane sonnel [Mota cae represent casera i cuuplenet l 2 eI os ule te Vee cial pure Plone, rapreti ds 18 eli nasil 1. Ge mad mie aura pat epson dfrt de se Bi vis tuce-a1- Colona noe ate poe eae epoca PL PWEL SST FM ASMK. Ca a le mie pest yproenta ileor serv dovate ese ASsoesolsehaaebase fa exempts gh wo de sire wm sae ed eaten 8 mew eve or Heaney 1b plant som ele raza 10, 2440 SE eo LAGE. de sw 18 tara TED 7H IDS pokst h em do se wo eaprroni.2. CbAss SF OBIT nod de fore wnat nealie «mer enema ex minere cam Tipe one: Ma (0 «ane Pent vile do tip ear ve Flos npreerzo Tat ‘etna corel se pein peo pare pie uta lke fafebete dct tu Cwartinc: alata ie seer dap cece, AS0L Tipo boots ave daa iter, true dl Fee CCkpeie a lw tp ete edo oa yn de Cha er a ca va lech rere la sbi a led fu lite I). Relerinjleobieer sel waa e ence abt reer dese de ete ad art bal Teel ue de veannie rac vale jot piaten ee ecb el ava Burs n wnt oe peed, a e0 ee Hath, fost in exemple de nijakzacr, O pena aceon cre soe fave i “Dest mi mt prorat alate) spp pntee imp Haj evan breve imple ale ee, hue dep deta ti Tat lip merce voir ial ipl ete ara (pont Wi ress paca, ea: Gun 0,988 0.9) “pit upd bootens vals iis hele felons “pos jp cae se plete ersten ou ean vent ‘erie Uneaten ?\ub000%; = peat eb ble aka nia peso ma, care grantor i ince mn bie t Cpu! eonstnmte, Uw elnp deena ov envstad eb tine 9 ee ‘ipa id pute Kinane ne bide ee herons dol mod ‘es Rind pszud en erat de comps, Aiea weallaeesesmte gt dots ub nite ke et cae au unt Ube, Cn exeaylscsyped PL al and ath bout aasprsile enn eels, ene repens Santa neal Trea. um ea fama) wae ats a wuts a Ioiabtes sigan ya one oye di tone eo kale | ‘hobs (pn mnt cave a ena gh eae) a ca @ roms ‘ie ‘Duc propels inbule comin om} saad db ‘ria anna dy mre foe ple «daa, isin wr atl Int opty fe aluage ls elaine ar, coe ep rar ale todo aun exidbat ste acomnncbl ew eal ne Be daca Haat thts tn ave, sae yp) a pa le Bt HENTELE COMPONENT Atm (IVE CHASE ‘nae morsenext vind a obi ete wea sa sa neat 12 Motode Declarares metodcter. 0 dai de mae dant pa wnt fir Aston cont tt cay pal er hears st lava caro. Moditouor ts thence wnt Samoa oie Ho: fra a i Sven ens iat aed ile earner sa ate pes, Copl must! oa ua hn alii cts {Tas dnt rroouanecenp as ster synod pin adeno eters nati i iii Pi Perscass LAE String CUP // od miser‘e partons Lic Bling ane; // mule poraoene piTic Parmana porache; J mamta gota /ootios pOLic etstie Long popes ~ 6) POLE: Boring eattenetoe — ycb-ates ‘String ropres = "Poressn # © bume 4 fre count sumarss porsonel "6 exe aly 3f (psceene = mel) Y Dublic staste reia mainctering®) ange) € Tesuoasa pers = soy Fozaoaut |); ass 0H © "(7eouzaseynes"y ere-aum = ‘Toa Zonesen" Apsten.cateszeta(pors.:AStringQ) than ss apa sont, Persona Ihloct. Passtew aay a ie vice anne ak Hn oe a ‘ ‘ 52 CAPITOLUL 2. CLASH §1 OBIECTE Cagi edmpurile, motodele pot fistatiee (meiede de elas’), cam este metoda nain din acest exemplu sau metode de exemplar, daci. sunt legate de fecare ct al clase (mieloda toString). O meioda declarati static va avea acces numai la edmpurile statics ale lasei si va putea apeta numa alte motode statice ale elnse’, deoarece membrii nosatiel sunt accosibili numai prin rofevinge la obioete gi mu oxiata aatfol de roferin{e disponibile inte-o metodii statics. Apelul metodelor. Accesul Ia campuri, Motocele staticr simt apelate folosind mimele clasei gi operatorul punct (), astfel de apeluri find, de exem- plu, e2le folosite in exomplele de initializatori ( Math.sextCein4s) ). Apelil metodelor dinamice se face tol eu aperatorel yustet, dae folosinel 0 la obleciul pe care se apeleard, metora, adicd folosind sinaxa gene obi sefe ral: reforinta.netoda(argunonte) Un exemplu esie System.out .printla(pers toString()), unde apar de fapt douéi apeluri de metode dinamice, Metoda printin este apelatii cu angu- menial pers tostring() pe obietnl referit pri out, enze apare ea vn eatnp static al easel Syston. Arguinentl iy apetul metodel printin este special ca valoatea returnat de apoul metodo! toString po obiectul refer de pore Din examinacea codulul metode! voftzing se observ ck melodcle dina ce woei close aus acces direct la variabilele de exemplar, Peau aitueile care se dorete (sau, cum se va vedea In exempleleurmatonre, este roxesar se inden explicit cx referves este Ia obit curent, se va flo eoorina specita this. In le de- 4€ (poreche == null) fn metode toString war 8 pul serie: if (ohis.pereche == mull) Nola t: Metoda toString cate o motodt special, in sensu ci orice casi dlispune de 0 metodi cw acest nue, explicit (ea in exerplul de mai sus) san implicis, prin mogtenire de ta clasa Object, dia care sunt derivate impli, toate cascie wn program Java aga cum sev ada 1 capitol rmter ‘Nota 2 Prin coaventie, mumeloclaselor in Java se seria eu majuseuli far rumele de metodo gi c&mpur inp Doll un mime soe form iniliala fecirui cuvént scriinduese cu snaajusenli. Executia metodelor. Revenirea din apel. Ca si in alte limbaje de programare, atunci efind se apeleasi o metodi fluxul de control al programului ee de la metoda apclanti la metoda apelata, instructinnile metcret apelate wctode, Bree executindu-se conform steucturii de comand a acestei ELBMENTELE COMPONENT ALE UNI CLASE 8 Pisiodctapelate se termint i fhwal de control revine tn neloda apelan a pave ul din undtenrelo womens = eecith 0 instmsjiane robsens ~ 88 ajunge la sfirgitul codului metodei; “se wenernt ocxeepte, Daci o metodi nu trebuie si retumneze nici un rezultat, tipul yaiorii ret le be speciick ls delararen metodo a votd @ memenea notode va Wconlind 0 istricjane return. Ale, medodels seamen cere fi dey enerta sau ran ct Poni return mai malic vl ites melo se po los ural Pot » tne = valorile rezuliate apar ca gi valori ale eam ilor ii aos valor als eeypator un cblet st tela iurneant o referinga la arel obiect; i eee jit s1 ult pera al metode! sat seta a ebeceg Mile se returneavi in aeole obiecte; pe ent = sso relate eink ns tbo gi i {40} tablou (in Java Lablourile se considera obice.), aia Ineiodele care returost 0 valcry ete obligalii ca orce ele de eee neil a we lrmine ocx onoteutnne return treo ey Hoare i asin iplutspcias ta declarasa masse Roce eet Ae, eeu gan ‘Transmitorea parametrilor. in Java tol’ parametrii snctodelor suat nat prin valour. Acasa tenia eh nets so hance gt [Paranctitor iar vuole din netods apolenh au sic atin nee Fametitreeringe a obiece, valoaonreterinat nv ands n penn by dat este peibil ea in mets se mode starea sbcului ofe rn hata wilizasenparaetior eleresan pt rlringe os He ValElom si respectiv ValRet, Ampreuni cu rezultatele obtinute la ru- frogrunclor copie, sa Vato ite uriionrn defn we ValBLen { lic static void main (String{] exge) { double a= 2.3, »= 4.5; Systen.out.printin(* » initial = " + a); unaa, b: d p Seem speineia(® a final =" 49); Wiblic obatic vod suma (double x, double y) { xm x+y; 54 CAPITOLUL 2. CLASE $f OBIECTE Syoten.out.printin(" arg 1 in motoda = " 4x); , y Reguitatul rularit programulai este: a initial + 2.3 facg 1 in metoda = 6.8 a final = 12.3 Jbyorvit clk desi in metoca guna valoarea primulni parameteu este morli- Hs, ooost efect nu ¢-a. transrais of ia raotoda main de unde s-a ict apelul Chhen YarRer este definis®s astfel class Yaiket ¢ publi static void main String] arge) { Pertoana pore ® nay Pexsoana(); NP = "a7ans09964760" "Maria Toneacu"; Syaten.out.priatla(*Mune initial: * + pers.aune); easatorie (pers); Systen.cut.printiaC*iime final: * +pexs.muna) ; + public static void casatorie(Porssana refp) { reip.nune ~ "Maria Popeoc sedp = mull; ¥ ¥ Ponte eulares, newstui Porsoana. fn urina rulisi program este necesar si fie disponibil, gi class 1e obgine rezultabul: Mune initiel: Maria Tonescu Mune final: Maria Popescu Prin urmare, chiar daci in motoda casatorie a fost modificatit voloaren reforingel transmisii ea parametru, refering din metoda main nu este afeclalt, aga ck dupi cevenirea din metoda apelatd pers indict spre acelasi object ca ai inainte de apel. Pe de alta parte, valoarea din cémpul nume al obiectului referlt de pars a fost modificata prin actiunes din moteda npelats. Acest Iwera poate fi mai ugor explicat cu ajutorul figurii 2.1, care arala sitwajia din momentul imediat urmatcr apclului metodci casatorie, reapectiv la afirsitul exeeutici metodel apelate, LEMENTELE COMPONENTE ALE UNEI CLASE 6 lat dupit apel exist dout referinge cle acelasi object: pars din fnain si copia acestein, rafp, din casatorie lar valoarea cin cdmpul obiectului este Maria Tonescu*. Acjiunea refp.nane = "Naria WW din metoda apelati va 6 refloctat’ in starea objectului pe care i Wy continnare gi pere dia metoda main. Ultima aefiune din metoda afecieawe, doar conkinutul ceferialei rep. mn oe | titer Foxe] atin rope perce crater) | ots ss [aan Wi ern nat ine Figura 2.1: Parametri refering ce alte Timbaje de programare, inelusiv din cole orientate po cbiecte, tronsferul parametsiloe prin referin{é, este important 2 fi explicati jntre transmiterca. prin valoare gi tranomiteres prin referin\i. ‘nvreferint@ inseamnd.cé mietoda apelati primesteo refer inal, mu -o copie @ acesteia. Dac in meloda, apelati se arametral, modificarea. se face dle fapt asmpra valorit originale. In jValElom si ValRef ar fi Insemnat ea. se modifica valonrea Ini a, respec- Jourea lui pere, cena co in diuva este imposibil. Desi, Jas nu trans- sm s¢ afirmi citeodata, ci tranamite amet unei metode si fe declarati final, Un astfel de fi modifeat in endl metodek, comporténdi-se deel ca fant pe durata exocutici metodei. O incercare de modificare a valorii puiametra 4nol va fi sesizata en eroare ined de la compilare, Dacit in Gasatorie anictul ar fi fost: public static void casatorie (tinal Persoana refp) (| ultima operauie din metod, refp = muti, ar f fost considera eroare iupilare. Ailizaren modifeatorulni #3na2 Ja parametrii unei mnetode se considerit ea Wii ce implementare, deci nu ce parte a contractului metodei. Beil nes Hiodificator se manifest’ nual asupra codului metode si mu influeneazi oun fel metodle apelante, locent fost introdusit in Java (versiones Ja 5) si posibilitaten de a CAPITOLUL 2. CLASE $1 OBIECTR eclara motode cu nuruir variabit de parameiri. Aceasti facilitate esie insit 1ai restrictivi decd in alte timbaje, cum ar C sau C++: ultima argument speelficat trebuie wt precizere tipul argumentelor (in numir variabil) ee ax putea Fura iner-un apel, redate Tn antetul metodei prin aotatia de olipsé (...) ea-gi la Tinbajul G. Procediindu-se astiel, compilatorul poate aesiza eventualele erori de apel Ga ilustrare se prezintit clasa AfdaPers, care are 0 metoda afiseaza cu humér variabil de argumeate pentrn a afisa starea urni mumar oarecare de obiecte Persoana, class AfisPers { public static void afisare( Persoana for (Perscana p:pers){ Systen.out.printla(p) ; Syeten.out.printia(); + } public static vold main (Stringl] args) ¢ Perscana pl = nev Persoana() Porsoana p2 = nev Persoana() Persosna pa = nov Persoana() pi.zune = "Ionoscu p2-nune ~ "Popescu"; p3.cNP = "1991212954080"; afisare(pl, p2,p3); pers) { Sea folosit in codul metodel af-fsare yo (orm noni a eichilul for, Intro- us, de asemenea, in Java 5 gi numitt generic foreael:. speeificarea dameniului de varingie al variahilei de control a cicluluise face indiedird mumai mamele une struciuri unde so gisese valorilo, ind subinfeles e& variabila de control ia pe: rand figcare din accle valori. Aci rolul lui pers esto de a crea un rmtne pentra rmulyimea parametrilor ce pot si apnré Te um apel: dach mu cra aceesar si se parcurg iterativ acea mulfinne, pers putea lipsi din antetul metodei afisare. Pentru rularea programulul AfsPers este din nou necesar si fle disponi- bid clasa Persoana, rerultatul rularii arditand astfel: Porsoane Ionescu are codul numeric personal aul si mu este casatoriza. | MODIFICATORI ioana Popesca are codul numeric personal mull Y este casatorita. oane mull are codul nuneric personal 1991212964093 iu este casatorit Modificatori I tumele de modifiretori sunt desemnate in Jaya toate cuvintele cheie “apr m fata tipului la declaratille de esenpuri san de metode, O categerie julificatori controlenzt aczesul In clase gi la mombrit acostora iar oa categorie cuprinde modifieatori care au alt rol deeét controlul aeeesulii. tunele deosebiri in ceva ce priveste aplicarea modificatorilor din vele ‘eaiegorit pentru clase, metode sau cémpurl, astfel e fecare din cele trel ii va prezentatit separat Modificatori de acces ul modificatorilor de acces este de a stabill regulike de visibilitate a Jor in cadrad un program gl a ckmpurilor 5! metodelor in eadrul claselor. (ate situatille (clase, metode, campuri) se folosese envintele chic Me, protacted si private, dar semantica poate diferi. Lecesul la clase. Clascle din cares compune un program aunt organieate ele (packoge), care vor fi discutate in detaliu intr-un capitol separal. ‘ni se specifcé: gruparca clasclor progranmului in pachete, se subinielege nile: clasele sunt in acelasi pache:, mumit. pachetul anon. efinitia une clase, envantul cheie class poate fi precedat de public, 40 are sernnificasin ei acea clas este zublied, adici oricine poate declara Infe In obicetele clasci au aceesa membrii publici ai clasci. In abseufa wblic, aga cum a fost cazul in Loate programele de pan acum dia at ol, clase eate accesibili nual in pachetul cuzent, (pachetul din care ca lea instrumentelor de dezvoltare Java disponibile in prozent evr lassi public si Ge definita intr-un figier earo aro ncelagi nume ca gi close, ‘evident, sufixul «java, ecea ce are ea gi consecing’ faptal c iubr-un fiyier od sursit Jaya ou poate apare decdt cel rault 0 chasit public). Accesul 1a campuri. Dac orice membru al unei eke sau obieet ar ( iiibil din orice alta clas sau obieet, ar fi ineileate eel putin principle WPapwullirii yi aseumde i informacl, ears sunt ice oriental po ubieete 08 CAPITOLUL 2, CLASE $I OBIECTE Aces Iuorw ote tn primal rand valabil pentru eémpuri, care definese staroa obigetelor Din neeat motiv s-ar putea spune cd toate exemplete de programe anterioare ‘nu respect’ prineipiile orientarti pe obiecte, pentru ca an eaimpuri publice. Sa prooodat ins in aeest mod pontra ci ine& nu au fost introdusi coustructorit ‘caro yor permite initializarea individual a ebieetelor ln exeare, Accesnl la edmpuri poate fi contiolat astfel: + private cimpul este direct accesibil mumai din metodele clasei. Avesta teste modul normal de speeifieare a accesului pentru eammpuri, astfel incat starea obiectelor sii au Be accesibil deat. prin metodele clase, ‘= protected - cmpul esic direet accesibil din motodele clasei eurente, dar $i din metodele subclasclor acesteia, precum gi din metodele claselor din ‘icelagi pachet cu class eurenta. public - edmpul este accesibil tn orice loc in care clase este wecesibili Davi o declaratie de cfimp nu este previzuti cu modifieator de acces, se considers iraplicit ok acel eimp cate accasiil in clasa eurenta stim elnsele din acelasi pachet. Accesul la metode. in maxe miisur'l accestl la metode este controlat in acelagi pod ea gi accesa la edrapart ‘Trebuue inal aubliniat ef esto normal ao las si aiba un numa demetode publice, prin care se ponte opera seupra cbiectolor clasei respective; casa ar fi neutilisebila in absenta uner metode publice. Mocicatorit de acces protected si private s¢ aplict numai merabrilor claselor, nn si elaselor insés en exceptia claselor Incubate ( nested), caxe vor {i prezoatato inte-un capitol separat aie, de azemenen, important de retint ei modifieatorit de acces se apes la nivel de Glasi.an la nivel de obiect, fa sensul ci toate obiectele crate din claga respectiv’ suut accesible th acclast mod. 2.2.2. Alti modificatori Modificatori pentru clase. 0 clasii poate fi +» abstract - dacit definijin clasoi este consideratit incompleti, de regula pentru e ea contine metode abstencte eam wemezit ef fe inplementate inv aubelase, Nia este peri si se crcene abierte ale ink lao abstracte, 12, MODIFICATORI 50 — ecoueeu aca Ecce wee ee AR eb a galls, Modifcatori pentru cdmpuri, fn afar de static 3) final, precentati “inpurilor Mi se ima pot apliea doi modifcatori eare au legiturd cu Slarit obiectelor pe suport extern, rospeetiv ew programaren con oat cent si de aceea compilatorul prebuie si genereze cod care si fologeascd. mera ea mal recent wloare lent, un camp nu poate fi dectarat similtan final si volatile. odificatori pentru metode. Pe ling stasic si final, melodelor li apirdnd doar caracteral °y , ca in exemplal urmitor: public abstract void onetadaQ: fa fi responsabilitatea subclaselor clasoi curente si definease’ un corp pentru o asemenea metoda. “hynchronizod - este legat de programarea eoncurenti, care ya. fi subiee {ul unui capitol separat, avand semnificatia e& o aseimenca rato 4 poate fi cxceutata simultan in dovi fire de executie, trictsp~ ca gi la clase, semmnificatia este clin metod operatiile in vit ‘pullé loLanid sunt evaluate strict. Dac o elas este declarau suri cttp, fatunci implicit teate metadele sale vor fi serietsip. wo CAPTTOLUL 2. CLASE ST OBIECTE 23. CRVAREA OBLECTSLOR o fe native - metoda este serisé in alt limba} de progeamace, dar va putea ‘De regula, ins, pentru initinlizarea obiectelor se folosese constructor’. O fi apelnia din cod Java. Deckaratia in Jara va fi ascméndtonre cu a “AIK poate avon orice numtr de constructori, tobi avind accag Fattodalor abetracter; i clase, La fel cx gi metodele, constructorii pot aves zo sau public native int’ printcO; ounetei, scrighintre paranteze si pot, de asermenea, avea modificatori. Spre Evident, utilizarea unor metode native conduce la plerderee portabilitati ‘pire de metode, constructorii mi an valeare returnatd, Codul constr fi programului Java eare le foloseste. mn operator ney este ezecutat dup ee edmpurile aw primit 4 secur 0 motoda abstractit nu ponte f static’, final sincronizata, nativ’ sau ex Paci clasa aro mai mulfi constructor, atunct acegia trebuie si: pont anitmotied flotant strict ebiKi dup numeral si/sau tipal parameter. (1] se prezinla edtera motivatii peatru utilizares eonsteuctorilor cu 2.3 Crearea obiectelor fxistA in multe aplcati clase pentru care starea infill a obicctolor mm Modul normal de a crea obiecte in Himbajul Java este aplicarea operaiorulul ‘A complet apecificaté nurnai prin inifializatori; nev pe un constructor al clasei ebisctului. Pani acum a fost folosit mimat Hmnetructia unui obiect ponte fio operatie cosbisiloace gl este Important constructor! ao-arg, dar, aga cum se va vodea, pot fi definits gi constructors ‘en parametri care se foloses Ia lnifalizarea sidri obieetului erent. ‘Tratarea operatorului new in suporiul de executie Java poate fi desert in felul urmitor: din detinijia casei obiectului (orice constructor va axe num clasoi) se dotermini spatiul de memorie eeesar pentru yalorile eéxapurilor lasoi obicete ale acclei clase a fic prin apelaren nat metode, care obiecLului si se roservi, acest spain din zona liberi a memoriet gestionate de constructor’ private ai clase tnasiua vistualé Java. Dacé ou mai exist spatiu liber suficient, va geverata Persoana ulilizatd an exemplele precedente poate & previiuta ew oxeeptla OutOfMenoryErxor si exteutia programuli oe termini, dupa afgaren Hokoriastel: resajulni "Ont of memory”, Dacia fest gisit spayin liber suficient se executt consituctorul, vealiind- ‘0 inifialinisi oricdt de complexe ale eémpurilor obiecttlui, pe basa argu- Jnentelor din apelal conatructoralsi. In final, suport) de exeeutie returneazit 6 refering la apul obiec Se rearninteste ch Iiubajul Java, este previizat cu colostor de residuur (gxrtage collector), ceca ce insearnni ci, uv este uecesar ca programaLorii sw ocupe de cliberarea spasinlui de memorie al unui oblect atunci cud obiect) mu mai este folesit. Colectorul de rezidunri, rulat, sub controlul suporinlal ic Persoana(String nune, String CNP){ ‘de executie al limbajului, va identifica automat obiectele pentru care nu ttl Bis (mune); sist referinte (deci ru mei pot & alilieate) gi va elibera spatiul ocupat de Hin CNP = CHP; existitsituatii in care ‘un constructor public, iar singurn, modalitate de a crea vate String CNP; // cod numeric personal vate String muna; // mmole perseaned Ayate Perseana pereche; // nunele cotului/sotiei Flyave static long populatie = 0; acesten, Ae Persoana(3tring nome) { 2.8.1 Constructori unui object pot f ini Cum sen viaut in programe: antesionre, edumpori livave ta declararesan, daca sunt publice, prin insisueliuni de atsibuine in el elor care au solieitat crearea obiectulul wn CAPITOLUL 2, CLASB ST OBIECTE » public void casatoreste(Persoana p){ p.pereche = this; ‘hin pereche = p; + Public String toString (){ String reprez = "Persoana " + mune + "are codul nuneric personal " + CHP + "\nei "; Af (pereche == null) reproz ¢= nw reprez 4= " oste casatoritall; if (porecho != null) reproz += " cu" + pereche.aune; return reproz} > public static void main(Stringl] args) ¢ Perscana persi = now Porsoana("Ion Poposca", "1760923359082" ); Persoana pers? ~ new Persoana("Vasilica Vasilescu’); pers2. setCNP( "2810505241234" persi.casatvoreste(pers2) ; System.out.printin(perst.toString()); System.out. print in (pers?) ; System.oat.printin("Populatia este de "+ Persoana.populatie + " locuitori."); $-au previizut dol coustructori, cu una, respectiv doi parame gi de aseme- ‘au fost lntroduse metode nol, sexGUP si casatoraste. in plus, a fost modifieati si Gefinitia metodes toString, pent a tition voloarea din e&impul pereche daca referinta este no-nulé Motoda main ilustreaz utilizarca tuturor faclitaiilor din noua de elasei, inchusiv aecesal la un camp static prin manele dlasel. Este de si faplul eX apelul metodel toScring a clasei unui obiect este realizat implicit dacd intr-um sir figureaz’ o referin ln object. Daca intt-o class este dolinit cel pufin un constructor, nu mai poate f constractoral implicit ne-arg, dar poate & deGinit un constructor fini, ‘argumente, dacd acest Ineru se consider uli Este perms ca din corpul unl constructor si fie apelat un all constructor al acelelas! clase, ag eam se poate observa in enasteactorl eve paranetyi “24. SUPRAINCARCAREA METODELOR 63 “a}clasei Persoana. Apelul trebuie si fe ins obligatovin prima instruetiune @geesiabilé din corpul eonsteuetorulai apelant. Corstructorul este apelat ea jutorul referinget speciale this, seloctaren constructoralui fisindu-se dupti ‘wuanitrul si tipul argumentelor din ape. Ca gi metodele si spre deosebire de Inijializatort, constructorii pot genera pill veri 3.2 Blocuri de initializare Existi inci. o modalitate do a efectua inijialixii complexe ale e€sapurilor obivetoler, aname blecurile de inifializare. ilisaxe consi clin sun bloc de insiructinni (seeven{é de iastructinni serisitilre acolade) case ‘apare th afara orieirul membru sau constructor al clase! yi care inijializeazs ‘linpurile obiectelor. Pot si apard mai multe asemenen Diocarh, oe find atunel rutate in ordinea in eare sunt serise. Un bloc de iniinlizare poate genera 0 tie verificab numai dack teti constructorii clase} declan’ acea exceptie. Blocurilo de initializare se exceuth In exearen fieckrui obicet, ca si eind ar plasate la inceputul oricdruia dinte constructor fu dasa Persoana sar putea prevedea ua bloc de inijializare care sit dea ipulul CRP ca valoare sirul de caractere “nelnat In evidenta”, In Tocul valorit ipliciie nal. Blocul ar fi scris inaintea primului constructor astfok blog de in q GW = “neluat in ovidente"; i, Ti practict se justiedutlzarea blocurior de initializare pent situate (are sunt necesare inifializari mai complexe, dar nu sunt necesari construe- "cu parametri gi nu so justifieR niei definizea unui constructor mo-ang ex leit. Pentru ciinpurile static ale une’ clase pot ft prevétaute blocuri de inifiulizar fr stulice, care se seria la fel eu cele pentru campurile dinamice, dar trebute si fie precedate de cuvéntul cheie stazi.c, pot referi doar membri statiei (eampnri ‘gimetode) ai clase’ gi nu pot genera exeephii vorifieate, Execuyia unui bloc de Jnifializare static are loc In inclirearoa elasel care il evsjine 24 Supraincircarea metodelor Se rewmninteste eX semadfura une! metode consti din rumele metocei gi di Jista de paramotni seri inte parantoze, 64 CAPITOLUL 2. CLAS $1 OBISCTE to parang ea mal multe metode ale nnei clase 8k fe declarate en acelasi c ( cn i in eaeul consiructorior), dac& semndturile lor sunt diferite, 4 difer murarul (i/40u tipul porameteilor. Se spune eX astfel de metode sunt supramedreate, pentru eh mumele metodei este Tincaeat” cu mai multe semnifca(ii, La apslul uel metode in codul surst al unui progran, comp latorut compari nummirul gi tipnl argumentelor pertra a determina eca mat Ipund corespandenya cu somnituile din definiyjile metodelor ca acolagt nme, in clas Persoana s-ar puten defini doud metode setCanpurs in. felul urmiior public void sexanpori (String CHP) ‘this. CHP = CHP; 3 public void sesGanpuri String CHP, Persoana p){ viule.cNP = CHP; his.perecne = p; pipereche = thi! + ‘La un apel va fi ugor de identifieat care definitie trebuie vtilizata, pentra cl aici gi numirul de argumente oste diferit. Se va verifies totugi dacé tipul argumentelor la apel corespunde cu definitia metodel. Evident, definijile pot § Imbunditaite, de exerapla prin verificarea e& azguinentul gir fransmis pentra ONP are formatul corespunzitor. Com somnlitura unei metode nu inelnde tipul valorit returnate sat lista ‘excepliilor generate, metodele nu pot f suprainedreate numai pe baza acestor elemente. 2.5 Metoda main Lansarea in executie a unui program Java se face specificdnd pentru inter pretorn? Java ( numit Java) mimele une! clase, de exemple java Perecana Suportul de execulie Lrebuie sit lcalizeze clase, sk 0 Tnearve si apoi ai Jocalizexe metoda cu numéle main ip acca elas’. Exeeutia programulut incepe 1m acsasts metoda, care trebuie si fe obligatorin public st szatic, si nu returnese rezultat (tipul valoriireturnate exe void) 35 si aibi ca angument tun tabloa de clemente de ip String. Evident, metoda main m poate fi suprain TARLOUR: ae Nueste obligntoriw.ea orice lack sk he provitsuticn.o metodé mata, Dacko se.compune din mai iulte clase, este suficienl ca munai una dintreele, iy car in mod logic trebuic i inceapit execu, si alba definité.o metodk B. Po do alti parto, nu esic eousideraid eroare prezen{a unor metodo main Inulte clase ale aplicatte.. Prezenta, Jor este ua bun auxiliar ponte Individual a corectitucini fiecsei clase, in main putind 6 prevésule inire testcle considerate neossare de progrumator. $i in prograuiele capitol, de exemplu in AfiePers, sunt folosite ai malteclase, fecere cate 0 molodé main. a oe suportul de execute trausmite metode maéa in tabloul port a in tabloul args sunt ele din linia de comand prin eare se lanseazi in exeeu{ie program Tuctu este Musirat prin urmatoral program Atcha € static void main(String args(1) { yr (dnt 4 = 0; 3 < axgo.loagth; i+) “Systen.out print (arge[i] « * ") isten.out.prinz1n(); Hkecuia acestui program eu linia de comands Java Afisarg argunentele din linia de la rezultatul @xguneatele din linia de comanda Obseivi cd args(0] nu este mumole prograsalii, cum cate casul Ta mele in, ci primal exgument propriw-ais. Spall suplinentane dintre ele linia de comand nx sunt vate fn cousidecane, conanca Tablouri inbajul Java un tablou (array) esto considerat object gi prin urmare dleclarare # nnnei variable tablow nu rezultit gi in creatca acclui tablou, Bul trebuie eat prin uiizaros operatorula new aga cum aad womaten- mxomple: int) tab = new inc[3}; Persoonal] grupa = new Persoana[30]; ul exeinplu crecaza un tablow tab cu trai clemente de tip iatreg al exemple ereoazi un tablow eu 20 de elemente s nie la obicete de tip Poraoane. ale citior yalori sat 6 CAPITOLUL 2. CLASE $f OBIECTR La dectararon uno vaxiabile tablou, parantezele se pot pune fle dupa auunle Aipulul olemientolon, fg duplh nwmnole variables tablou, adica declaratiile: ine () tab; ine ably unt eelivnieonta, Wate Hawk proforatit prima forma, pentru ek ea. insedmnit 0 declarare complet « tipuluf Inti-ue singur toe. Numiirul de inisun fablou m este specifeat la declararea tab: lui, el In crearea sa, Dincnalunea unui obiect tablou nu poate fi niodificals. Gupit crearen oblectulvi, dir unl variabile tablo it poate fi ulterior atribuit tun obiect tablow eu alt dimensiune, adie ne putea apare In acelasi program ‘eu exernplole do mnad aust grupe = new Persoana(26] ; Accowu Ta elementie tabloull se realizes prin Indicarea pozitiel elem im tablow, indie moepsind ce la 0, Iiceare acoes la. un element de tablow ste verifieat, astfel ca valonrva indieela! i fe tn afara tabloului (inainte de prinml clement sau dupé ultimul element) ‘care la exeoasio se va genre IndexOutOfBoundsEzeption iar exceutia programului este abandorata. t Fiecare obiect tablou are limplicis un edunp, eare poate fi considerat declacat astfel: public final int length; Gémpul Lengel este de ceguli. ulilisat peniru controlul parcurgerit ele menielor tabloului, asi. eum se poate abserva in programul pentru afisares, ngumentelor cin linia de comand dat-ca exemplu in subeapitolul prevedent 0 proprictate interesanti esto acoea ei sunt permise tablouri cu langine ero (valoarea din cémpul Length este 0), aumnite tablouri vide (emply arrays) ‘Trebule remarcat cA este o diferen{’ Tnire o referingé de tablou ew valoates ul] s/o referint la. un tablou vid. Se poate folosi un tablou vid ca. valoare retumata de o metoda in loc de a specifica nuLL-ca valoure returiatil. Daca (6 motodi poate returna mil, atanci uilizatorii metodei trebuie $A verifies explicit valoasea returaaté, pe cand daci so rotumear’ tablon vid verifienr explicit nu oste necesari, cu condifia ca intotdeauna si se folosease’ hungimen (abloului pentru verificarea indicilor vali Ga si in alte limbaje, pot fl declarate $i in Jaya tablouri de tablouti, exemphis double{] [] matrice ~ new double (4) [61 Alei a fost creat un tablon cu 4 elemente, fecaxe element find un tablow ou Gelemente de tip doable, La erenrea unl tablou de tablouri este obligator se apecifiee pri ) ENUVERARI 7 Hits Novia. toot in exon! de mat us eae prscuitard acca evita seturi do aplun la now speapuse. Bat i legal uaa yinent de cod: cia ae ek’ ant triPas(](] - new int(4]0; for (int 1 = 0; 1 < tries. length: 44) ‘riPea 3] = ney int lh Upto elemental tablont tesPae cote un talon ex un sing element é ‘este un tablou cu 2 clemente ete. ; afl, 0 sirocturd ented, dart care cementele sunt iijateate Wate realize ostfel: ee we triPact](] - { 4), ft, th, a, 2s 1h, fi, 3, 3, 1) + Enumerari tablourile constituie eau speciale de obiecte, Java 5 aduec é wow ‘tin cay special de clase, enumerérile, J omumerare este definita antfel: ublic enum 2: letucratoarol WNE, MARTI, NTERCURI, JOZ, VINERT Cuyantul cheie enum este fok facolacle constituie exeinplarcle tic ih Woe de class, Numee tate ° constaniek) emumerici, In orce ti # eaumeréipoale apare mal unl ditre reste num, del ail fate akg din punelal de votere al vere parlors oree al decal cele 5 specificate ar npare acolo unde se folucracoare, afi conicatd eave decompiler Agen toate lasts cbigmae sume derivate Joc, toate erunertcte se consi era det Hireet sai vate din.t-0 Miecare cnumerace primeste automat 0 serie de metode ih ae Bs Public final int ordinal() are pentru eare este apelats rect, din abstract Enum ale clasei Enum, rotumeaai ordinalul eonstantel de cy CAPITOLUL 2, CLASH §L OBIECTE pblie final Siing rane - roturncad wumele conptantay exect ‘ys curv pave i doelazaren enumesii Se-recomada ins utlizaren metodel (oslvring Gwe MU este Lina gi deci poate f redefiniti in enumernre, astfel Jnoht 9h do 6 reprozentare mai convenabila : Pe [ny doclararea constantelor, in dofinitia unei numeri pot apare gi definili de cdaupuri si mciode. De asemenea, pot ft adiugati construciori te Pomiiantole enumerérii, Defluitia peniru ZileLucratoare we poate complete ‘fol: public onun Zitetucratoaret LUNE (Ox1), MARTI(Ox2), HTERCURT(Ox4), JOE(Os®), VINERI(D=40) ; private int ral; Pilebucravoare (int val) ‘this.val = vali y public boolean 2iDoPost(){ pwiteh (this) { case HIBRCURT: case VINERI default: return false; p: > public void printallOt for (Zilolucratoare 2! ‘Syston. out .printin(el.aane()); return true; lelucratoars. values ()) > public String toString()€ String ret = this.nama(); return ret + "(" + this val +” + Public static void main(String {] arge)( 2ilelucravoare 21 = Zilelucrateare.LUNT; Af C2L.zivePost()) System.out.printin(zl +" este zi de post."); else Syston. out.printla(el +" mu este zi de post."); pl.printAll 0; > y ‘in nowa definitie sa addugat, cAmpul privat val si constructorul ZiLeLu~ PASE INPASURATOARE ow | Gratoare (int val), cont oo permite ea la declararea.constantelor eaumeriath "Bi se specifice i 0 valoare aiasatié feckreia, Au fost, de asemenea, definite doud metode, ziDePost gi printAl2, in care a ilustrat gi modul de folosine | 4 Gnumerasilor in insiructiunile switen si for. Meioda nase a fost adaugat Aécar peutru a tustra utilizares facilitator introduse, Nn este permis ca pentru variabile enumerare (cum este 21 In program Ge mai sus) 8% s0 foloseascd operatorul news trcbuie ca o astfel de varlabild si "fe inifializatd ew una dinixe corstantele enumeri |, i legituri cu meloda values utiizats in definijia motodel primeAl) os fice deocamdata doar precizares eX mullimen conctantelor unei eoumeriti eonstiinie 0 corespondentd (map) (concept discutat intr-un capitol separat) sh Yalues() rlumeaz’ rmiltimea valorter dinti-o corespondea 2.8 Clase infiguriitoare __ Pentru toate tipurile clemontare ale Hmbajului, iu Java sunt definite clase Wbsrétoare (orapper classes), care au rolul dea crea oblects corespunziteace Valorilor clementare, asifl init acrstea si poata fi ulisate in situa iu ease le obligatorin sk se lucrexe cu obiecte Miecate clast infigurtioare defineste un obieet imulabil pentru valonsea iventarai pe care o Tnfigoara, devi o data cea fost creat un asementca ubiect, Hofirea elementars reprezentals prin ecel object mi ponte fi madificat, Clasele infiguriteare sunt: Boolean, Character, Byte, Shor:, Inte~ br) Long, Float si Double, Fiecare dintee ele este provizutd eu eonatrue- ace au ca parametra an tip elementar, respectiv un String co rel nesentarea extern (Iieralul) unei valori elemontare, Asifel, casa Tntewer constzuetoris public Tnteger(int value) | -ublic Integer (String s)throws funberFormatéxception pot Bi utilzali astie dav 1 = 2348; Integer intObjt = nev Intogox(i) Integer int0bj2 Intoger (#29454 Clasele infiguritoare au 0 secie de metode, dintre care se prezint aii ce 6 fae transformirile inure oblecte infiguritonre gi valorile elomentave ~ public static Type valueO# (String atx) - returneasd um wow obi Ale pul Type, a chrui valoare ete decodical din stx. Daca sur ut pat f ocod morenaii NunborormatExceptiion. Se observ ik mites ri ‘wehvalnt en ec deal doilen fe ee eo 0 OAPITOLUL 2 OLASE $1 OBIBCTE de utilizes Integer objiut = Tavager.valueds("12945 Float objFloat = Float. valueds ("130-26"); = public type fypeValue - returmenzi valonrex elemeritari corespunse tare obieetulud infégurdtor pecare esto epelati moods. Exemple de utiizare: int valine = objint.incValue(); float valfloat = objPloas.floatValue() 2.9 Clase gi metode generice So roamintogte e& th Cop. 1 genoricitaton a fost doseriet eo "wecaninnnl prin care 0 clasit poate f definiis astfel incat anumite caracteristici ale sele oo 86 preclaeavit doar la operable de ereare a unui obiect al clasel simi in 1°. Tn limbajul Java mecanisral acesta a fost Introd incepand eu versiunea Java 5. Delinitiile de elase gi metode pot fi parameirizate in raport cu fipul unor elemente componente, urménd ea identitates tipului si fio prosizatit nuinal Ia vtiizare, Prezealarea faclitijilor logute de yenericitake din aceat capitol este doar deoarece uncle dintie aceste facilitati implica utiizarea wor cunogtiz= yor fi introdase in capitolele urmitoare, Din acest motiv, tema. gener Ajit va reapare si in alte capitole 2.9.1 Clase generice © last este generied dari deslar’ una sau mai multe variabile de dp, care se seriu dupii mmole che intre paranteze anghiulare (<>), ea in urmitorul exemnplu: clase Stiva { U/ declaratii de compari 7/ daclaratii de metode > Accs definite de clas se poate folosi peubru a crea obiccteslivibae oir element sunt de orice tip, care trebuie x8 fle declarab la erearea obiectulu. Prin & este redat demumitea generica a tipului parametra, Tatrewn program aun putea deci iatalni weansitonreles StivacString> otivasix = new StivaSering? (); StivacPersoane? stivaint = nev StivacPersoane>(); adic sau ereat, eu eoastruciorul no-arg al clasoi Shiva, dou obivet: stv ‘29. CLASH $I METODE GENERICE a contine ca clemente referinje la giruri de caracters gi coalalldi are ca wonte veferiale la obiecte de tip Persoana. Se observa c& tipul efectiy al mntelor stivel este precizat aldt la declararea varlabllei, c@ gi la apelul struetorula class vod <5, D> ¢ // Soclaraeis do campuri // doctaratii do notode a Arelas Hod poate fi utilizatt asthe Nod ned = nov Med () ; recornandit ca numcle variabilclor de tip din dofinitille dlagelor generics e seurte (chiar numai un caracter dacit este posibil) si a8 se folescascit le, pentru a fi uyor deosebite de namele parameteilor de metode, ratea declaratiflor de cémpuri si definisii de metade ale acelei clase. O Aili implementare a elasei Stiva va axita ast: Stivace>t ject [} tab = new Object (100); nt top = 0; public boolean push (E olen){ 4f (top == 100) return felse; vabLtopt+] = elem; revura crue; » public & pop 4f (top == 0) xetura aul; return ((E)tab[-—top]); y n OCAPITOLUL 2 CLASR St OBIBCTE public vold print (> for (int 4 * top-t; >=0; i--) Syebom. ous. prinvinc(2) tabla); » public avavie voie main(seringL) args) ‘StivacString> etivaSir = new Stiva(); stivaSir.push("Priml sir"); Syoven,out .printin(otivadiz.pop(); ativadir.print(; SuivacPersoana> stivaPers = new StivacPersoara>(); stivaPers.push(new Persoana("Ion")); stivaPers push(new Persoana("Vasilo")) ; stivaPers.print(); Din causa eX Java mm permite doslararea unor tablouri generic, s-8 utilical pentru memorarca clementclor unci stive un tablow eu eleincnte Object, casa fundamenteli a ierarhiei de clase Java (detalli vor f date in capitolal urmAtor) Mai tinziu vor fi discutate si structuri mai adecvate decat tablontile pen:rn implementarea stivelor. Operajiile de bara asupra unei stive, push g) pop sunt definite foosind variabila de tip B.A fost dofiniti si motoda prime, eare afigaté eontimutul unei stive, de la varf Ia busi, Metoda main erecarii, dou obiecte stivi i efectueazit 0 serie de operatii asupra acestore, Capitolul 3 Ha ei ace ale ies po obec Moyles Susan Ao al clase sau clasa eatinst) dobndeste cAmpurie st tetodele une alte clase sperlasa) fax a mai tcebui si le declare expliet. Polimorfisrmil poste fi lerpsetat In cou sensu Yedefiniri ale campuriior si/sau motodlor unei superclase tn subllase; = utilizarea obiectelor umei subelase acolo unde poate fi utilivat un obiect juporelaeci. Maai conezet, extinderea elaselor Inseamnit donk forme de mogtenine [I+ = mostenite de contract sau tip, prin eare subelasa dobindeste contractul perclasci si deci poate f folositi polimcrfic oriunde ae poate folos superclass = moglenice de impleraentare, prin cave subclasa dob deste implementarea wrclase, acicd toate cdunpurile si metodele accesible Gel mai frecvent extinderea claseor se foloseate pentru specializare: in clase Ans sunt definite propricti{i noi ev ajutoul unor eéepusi gi motode Inst posibil ca extinderea si insermne doar modifeares implement unci ode mogtonito, eu diferite motivaii: exeylerea ficient, iudicares nul wos ole. Modificarea implementarii contractutus superelasei este admisibili gi Ibi, ct condigia sw apara o violare a proprietatilor sernantice ale von wh ‘Viniind cont de mecanisinul de control al aceesului la siemibr snc ela, poate vorbi de fapt de doud contract: * contractul pentru utilizatorit elasei, ear an la dispoviie unmon cual ti u“ CAPITOLUL 3. MOSTENIRE $I POLIMORFISM ple al elas ‘contract pentru clasele extinse, care au drept de acces si la membril protected al case! IW fing, trebuie precizat e& In extinderea elaselor mogtenitea de contract gi {yojlunivea ee implementare apar obligateriu impreuna. Limbajul Java pune IVs 1a dispesitic im mecaniam, interfefele, prin eare s¢ pot defini avi tipu Tiilepenideny de iniplementare. ‘De asewenca, eats posibil ca iunplementh osinbonte v8 fe reutilizate Rink extindere, prin compuciti. $1 Un exemplu de clasa extinsa Claga Persoana din capitolul precedent poate fi folositi ea superclass pen tru © clasé Student, in care pe mai adaugii dowd edimpusi pentru a preciza upociatizarca si anul de studi. Se adaugi, de asemenea, metodele adaiite gi promveaza. Metoda toString este redelinil, aga cum se revomandld $8 se rovedere la flecare definire a unei noi clase. Fsie defiait s1 um consirucior ‘cu doua argumente, mumele gi codul nanperi¢ personal al studentului, prey lun eonstrctor eu un singur argument, numele studentului. Delnitia glasei Student va anita in felul urmtor: public clase Student extends Persoana { private String spectalizare: private int anstudin; public Student(String mine, String CHP){ ‘super (nune, CNP); + public Student (String sune){ ‘his (aumee, mu) ; > public void admice(Sering spoc){ \ specializaro = spec; anstudi = 15 , public int promoveaza(){ anstudiores return anStudiss; + public String toString(){ String xez = super.toString(); rovurn rez +"\nSpecializare + speciolizara » re _ 7 7 2. CONSTRUCTORII CLASELOR EXTINSE 7 "\nam studid: “ + anStudin; lic static void main(StringL] arge){ Studoar popeacs ~ nov Student ("Popoecu!); ‘popescu.aduite("Calculatoare"); ‘popescu. prouoveaza(); __ Sysven. out .printla(popescu) Baccufia progreniului, in care & fost prevasuld sio meloda asin, produce sultatul: ‘a Popescu are codul mumoric personal null nu este casatorita dalicsrea: Calculatoare ‘Uh obiect al clasel Student va contine implilt $i eampurile definite pentra Persoana gi poate utiliza metodele cx. modifiratorii de acces public si stad din seen clas, " Tintind cont ei orice clasi Java mostonegte implicit elasn Object, pov sci Student into diagramd de clase UML este ova redat& tn fig, 3.1. | —_Smtent__| spesilicore Snes ‘admite(Sug ) prcmioveazat ) setONPGirng) Figura $.1: Diagrama UML pentru clasa Student Relatia ce mostenire este redat print-un sogment de dreapti eu sigeata {youla la capatul dinspre superclass. in conturveile eare reprezinta elasele ax ost indicato, po lang® numele clase, care este intotdesuma obligatorin, cateva “inure camprile si motodele fisixeia, $.2 Constructorii claselor extinse Pentru a construi un obiect dinti-o classi extinsa srebuie inijializate nti chmpurile mogienite din superclasi, cat gi campurite now introduse in clan fextinwi. Tn constructor al elise) extiase ponte inigializn mum cainpile entail 6 CAPITOLUL 9. MO$TENIRD $I POLIMORFISM ‘ugtfel ck pentew Inlyiatioarea clorlalte ente obligatorin st apelezey implicit san cexplilt In constructor’ din superclass. Pentrw apelul explielt al umul coustructor al superchuei (xe reamiateste ei nu ew mojtenose consteactoril este utiliaat euvéntnl chele super, aga cum fo observ in eodul eonstructorvtai clasei Student. Selectia constructorului fnpelai se face conform avaalralui si tipului parametrilor furnizati la apel Poate flaménat apelul unui constructor al superclase apeland mai inti, prin ‘antl chele thas, un alt constructor al cla anja cum exte exeul fonstevetoulii eu un singur argument din clase, Student. ‘Daci mm cate apela: explicit un constructor al superelasei (sau alt con strucior al clasel curcnte) ca primi instructiune execulabiti din code wml constructor, atuned are loc implicit apelal cousteuctorului no-arg al supercla- sei ea prima instructinne executabila, Pentru situafile Ta eare superelasa ma {re an constructor no-arg, este oblipatorin apelul explicit al altui constructor a anestcia. Se reamintesle din capitolul procedent eX atunci cfnd se ereeazd. un nox obiect se poate determina din defintia tipului (clase) obicctulai c&t mome- nie este necesard pentru starea oblectului si, dacé exist suficienti, memocio liherd, se rerervito zond corespnzatoare, flecare camp al obisclului initialzat on yaloarea implicité pentmn sipul campulul. fn continuaxe trebuie pareurse urmaitoarele etape: + apelarea coustructorului superclas. + iniyinlizarea cémpurilor pe baza initializatorilor gi a blocurilos de inikieli- axe: + executarea corpulu} constructorului. Prin urmare, apelarea (Implicit sau explicit) a constructorului super clase’ se exeenta chiar inainte de utilizatea iniialzatorilor pentru cdmpurile doelarate in clase oxtinsi, Daca prima instractinne din corpul constructornlui tune clase extinse este ua apel ea thie la ua alt eoustruetor al aceeiagi clase ‘alunci se parcurge lanful unor asemenoa, apelusi pind ve ajunge la spelul ex- plicit sau implicit al constructorulai superclesci. Bxpresile evaluate eu parte i efocturi apelurilor explicie de consiructori nu se pot referi la membri ai mt, pentru ci, object nu exist inc Intro stare ullizabil. In consiructorul superclaseh se vor parcurge aeeleasi trei etape, ccon ce inseam ct la erearea fieekrui obiect se ajuage pani la apelarea construc: torului clasel Object. Hapa. dowa, apliayen i obicetahubeuent, eu condijin en membsii reapectivi Dipl cermmiares excent obieetului falizntocitor, permite utilizaren uno Fie dja dechurati ristenetor, rontrotul vevine la corral unui 48. MEMBRI MO$TENITI. MBMBRI REDBFINITI w fonstructorul de unde s-a Bios apelul, peocesul acesta continudind pin 92 luring executia.constructoriul speriicat de new, Daca se genereazi o exceptie pe durata procesului de ereare a unui obieet, ‘shine operatorul new retumeaza acea exceptic in local une relerinte la cbiee- Lulnou creat. Nu este posibil ca ialr-ua eoustructor aie iniexcepteze except erate: de un constructor al superclasei, deoarece apell la constructor ul i= jrclasel este obligatoriu prima-instructiune din corpul consteuctorului Grearea ini obiecs de tip Studant prin instruetiunea: Studoat popescu = new Student("Popesce" ‘urmiriti pas eu pas in tnbelul 3.1, in care dem moseurtate pentru a incape pe o Tinie. edmpurilor au fact Bxplicatie GNP [mune | per [spo [an 0) | Campari x valor! apliete voll | ull) nul | nall | 0 J | Apel constr, sevdant cv t arg | mull | sll | nail | nalt | 0 D | Apel constr. Student cu 2arg. | null | null | null | null | 0 Apel constr. Persoana cu 2 arg. | null | ull | null | nall | 0 ‘Apel cousiz. Perzoana cul arg. | null | sul | mall | null | 0 Apel consir. Object atl | matt | nut} nit | 0 Bxec. constr. Persoana ex 1 arg. | mull | Popescu | null | null | 0 Bxec constr Persoana cu ? arg. | null | Popescu | null | rm | 0 xe. constr. Student cu? arg. | null | Popescu | nail | null | 0 Bree constr. Student cu larg. | null | Popescu | null | null | 0 ; ‘Tabelul 3. Crearoa unui object al clasei Sudemt Membri mosteniti. Membri redefiniti [h Glascle extinse pot fi ad&ugati membri noi, dar este pernisii gi redefinirea inixe membrii mosventi efectal redetinis! find fer An cuz) metode- le cazul cimpurilor. ‘Situatia specialé a redefnir membrilor in asa ite va. fi presentatX intraun al eapitol 1 inlocuirea metodelor wntru Ineoput se procizeazi diforents intro suprainaiirearea (overlong) Mocuirea (overriding) unei metal: © inpraincarearea, prezeniatic in capicolul anterior, iaseannna deliniven in agi elasii a mal rnultor metode cu nume identie, ere we diferentiazt rin

S-ar putea să vă placă și