Dedovanje je osrednji koncept v objektno usmerjenem programiranju (OOP) in ga pogosto obravnavajo kot enega od gradnikov za povečanje učinkovitosti. V tem vadnici boš poglobil svoje razumevanje dedovanja v Javi. Naučil se boš, kako ravnati z dostopnimi modifikatorji, uporabljati konstruktorje in kakšno vlogo ima enkapsulacija pri dedovanju.
Najpomembnejši ugotovitve
- Dedovanje omogoča pridobivanje lastnosti in metod razreda.
- Dostopni modifikator private omejuje dostop do spremenljivk ali metod, medtem ko protected omogoča razširjen dostop znotraj razredov, ki dedujejo iz izvornega razreda.
- Konstruktorje je treba klicati v podrazredu, da se objekti pravilno instancirajo.
- Metholode v vmesniku je mogoče posplošiti, ko imamo več specifičnih razredov.
Časovnica korak za korakom
Dostopni modifikatorji: protected vs. private
Če v razredu, kot je Vozilo, deklariraš spremenljivko (npr. Barva) kot protected, lahko to spremenljivko v izpeljanem razredu (npr. Avto) uporabiš neposredno. Če pa spremenljivko deklariraš kot private, ne moreš neposredno dostopati do nje v podrazredu.

To konkretno pomeni, da je dostop do private spremenljivk mogoč le preko setterjev in getterjev.
Primer prikazuje, da moramo uporabiti setBarva in getBarva, da dostopamo do private spremenljivke barva.

Če je spremenljivka deklarirana kot protected, lahko preprosto dostopaš do nje v razredu Avto in spremeniš vrednost.
Uporaba konstruktorjev v dedovanju
Ko definiraš podrazred, moraš zagotoviti, da se konstruktor nadrazreda pravilno kliče.

To zagotavlja, da se barva ob ustvarjanju objekta Avto pravilno inicializira.

Paziti moraš, da v podrazredu definiraš konstruktor, ki ustrezno prenese parametre nadrazreda.
Dedovanje in klici metod
Še dva razreda, Vozilo in Avto, ti omogočata uporabo splošnih spremenljivk in metod. Ko definiraš metodo v Vozilu, jo lahko uporabiš tudi v Avto, ne da bi jo morali ponovno pisati.

Tukaj je metoda izpišiBarvoVozila poklicana, ki izpiše vrednost barve, ki jo zagotavlja metoda getBarva.
Omejitve dostopa do metod
Če poskusiš poklicati metodo v podrazredu, ki ni na voljo za ta razred, dobiš napako pri prevajanju. V našem primeru mora biti predmet Vozilo predan, da se pokliče metoda getBarva.

To praktično pomeni, da moraš zagotoviti, da metoda ustreza tvojemu podatkovnemu tipu, preden jo pokličeš. Tako lahko predaš kolo, avto ali oboje metodi, ki pričakuje le objekta Vozilo.
Primer klica instančnih metod v statičnih kontekstih
Upoštevaj, da v statičnih metodah (static) ključne besede this ne moreš uporabiti, ker se ne nanaša na specifično instanco. V takih primerih morda vzemi drugo metodo ali prestrukturiraj logiko.

Zaradi tega klica se barva za objekt meinAvto pravilno izpiše.
Sklep - Dedovanje v Javi: Vodnik za začetnike
Dedovanje je pomemben koncept v programiranju z Javo, ki ti pomaga modularizirati in ponovno uporabiti kodo. V tej vadnici si spoznal osnove dostopnih modifikatorjev, konstruktorjev in klicev metod v povezavi z dedovanjem.
Pogosto zastavljena vprašanja
Kako lahko dostopam do private spremenljivk v podrazredu?Do private spremenljivk v podrazredu ni mogoče neposredno dostopati. Uporabi getter in setter metode.
Kako je razlika med protected in private?protected omogoča dostop v podrazredu in v istem paketu, medtem ko je private dostopen le znotraj lastnega razreda.
Ali moram definirati konstruktorje v podrazredu?Da, če si prilagodil konstruktor nadrazreda, moraš tudi konstruktorje v podrazredu ustrezno definirati.
Ali lahko prosto prepisujem metode iz nadrazredov v podrazredih?Da, lahko prepisuješ metode, ki niso označene z final ali static, v podrazredu, da implementiraš specifično vedenje.