Dedovanje je eden temeljnih konceptov objektno usmerjenega programiranja. Pri programiranju beseda dedovanje predstavlja razmerje, v katerem podrejeni razred prevzame stanje in vedenje nadrejenega razreda.
Namen dedovanja pri razvoju programske opreme je olajšati ponovno uporabo varne in zanesljive programske opreme. Ena glavnih prednosti uporabe dedovanja je v tem, da odstrani odvečno kodo v vaših programih.
Kako deluje dedovanje
Ideja dedovanja je, da imajo številni razredi ali predmeti enak nabor atributov in metod. V duhu izdelave zanesljive programske opreme lahko torej novi razredi zdaj črpajo iz že obstoječih povezanih razredov in jih po potrebi razširijo na obstoječa stanja in vedenja.
Resničen primer, kako deluje dedovanje, bi bil upoštevanje sadja. To je široka oznaka, ki služi za vključitev različnih predmetov.
Jabolko je sadje, pomaranča pa tudi. Vendar pomaranča ni jabolko, zato ne bi imeli sadja kot enega od zalog, če bi imeli trgovino. Morda bi lahko imeli na seznamu razdelek o sadju, v tem oddelku pa bi imeli bolj natančne predmete, kot so jabolka in pomaranče.
Tako deluje dedovanje.
Uporaba dedovanja v Javi
Dedovanje se lahko uporablja v katerem koli programskem jeziku, ki uporablja objektno usmerjena paradigma programiranja. Vendar pa je natančen način uporabe dedovanja odvisen od določenega programskega jezika.
Na primer C ++ je tudi objektno usmerjen programski jezik. C ++ podpira tako imenovano večkratno dedovanje, medtem ko Java podpira samo eno dedovanje.
To pomeni, da ima lahko v Java nadrejeni razred veliko podrejenih razredov, vendar ima lahko vsak podrejeni razred samo en nadrejeni razred (eno dedovanje). Vendar pa lahko v Javi dosežemo posredno večkratno dedovanje z ustvarjanjem odnosa starih staršev, staršev in otrok.
Ustvarjanje nadrejenega razreda v Javi
Postopek izbire nadrejenega razreda iz dokumenta programskih zahtev je znan kot objektno usmerjena analiza. V tem postopku se izraz "je a" pogosto uporablja za prepoznavanje možnih dednih razmerij. Iz zgornjega primera bi lahko videli, da bi bilo sadje naš roditeljski razred.
Primer razreda roditeljev sadja
javni razred Sadje {
// Izjava spremenljivke
zaščiteno semensko vrvico;
zaščiten String skinColor;
zaščiten String okus;
// Privzeti konstruktor
javno sadje () {
seme = "";
skinColor = "";
okus = "";
}
// Primarni konstruktor
javno sadje (semenka strune, barva lupine, barva okusa) {
this.seed = seme;
this.skinColor = skinColor;
this.taste = okus;
}
// pridobitelji in nastavitelji
javni String getSeed () {
vrniti seme;
}
public void setSeed (String seed) {
this.seed = seme;
}
javni niz getSkinColor () {
vrnitev skinColor;
}
public void setSkinColor (String skinColor) {
this.skinColor = skinColor;
}
javni String getTaste () {
vrnitev okusa;
}
public void setTaste (String taste) {
this.taste = okus;
}
// metoda prehranjevanja
public void eat () {
// splošna koda, kako jesti sadje
}
// metoda soka
javni prazninski sok () {
// splošna koda o sočenju sadja
}
}
Eden najpomembnejših vidikov zgornjega nadrejenega razreda je modifikator dostopa, ki se uporablja z vsako izjavo spremenljivke. "Zaščiten" modifikator dostopa je idealen za uporabo v nadrejenih razredih, ker preprečuje, da bi podrejeni razredi dobili dostop do podatkovnih atributov nadrejenega razreda.
Nadalje v kodi se predstavite konstruktorjem, pridobivalcem in nastaviteljem, ki so splošni gradniki za kateri koli razred Java. Na koncu so vam predstavljeni še dve metodi (sok in jesti), ki sta ustvarjeni v nadrejenem razredu našega programa, ker sta univerzalni za vse sadje - vse sadje je mogoče jesti in sočiti.
Ustvarjanje otroških razredov v Javi
Otroške razrede običajno imenujemo specializirani ali izpeljani razredi, ker podedujejo stanje in vedenje od staršev in te atribute pogosto prilagodijo bolj natančno.
Če nadaljujemo z našim zgledom, bi lahko videli, zakaj bi bila oranžna primerna otroška stopnja zgornjega razreda sadja.
Primer oranžnega otroškega razreda
javni razred Orange podaljša sadje {
// deklaracija spremenljivke
zasebni int supremes;
// privzeti konstruktor
javni oranžni () {
supremes = 0;
}
// primarni konstruktor
javna pomaranča (seme nizov, barva kože niza, okus niza, int supremes) {
super (seme, barva kože, okus);
this.supremes = supremes;
}
// pridobitelji in nastavitelji
javni int getsupremes () {
vrniti supreme;
}
public void setsupremes (int supremes) {
this.supremes = supremes;
}
// metoda prehranjevanja
public void eat () {
// kako jesti pomarančo
}
// metoda soka
javni prazninski sok () {
// kako sok in pomaranča
}
// metoda lupljenja
javna lupina praznine () {
// kako olupiti pomarančo
}
}
Obstaja razlika med tem, kako izgleda običajna izjava razreda Java, in tem, kar imamo v zgornji kodi. Ključna beseda »extends« je tisto, kar se v Javi uporablja za dedovanje.
V našem primeru zgoraj podrejeni razred (oranžna) razširja nadrejeni razred (sadje). Zato lahko zdaj stanje in obnašanje razreda sadja dostopa in spreminja razred pomaranč.
Edinstveni atribut, ki ga ima naš oranžni razred, je identificiran s spremenljivko ime supremes (kar je uradno ime za majhne segmente, ki jih najdemo v pomarančah). Tu pride do izraza specializacija; nimajo vsa sadja supreme, ampak vse pomaranče, zato je rezerviranje spremenljivke supremes za oranžni razred logično.
Logično je tudi dodajanje metode "lupine" že obstoječim metodam "jesti" in "sok", ker čeprav vseh plodov ni mogoče olupiti, pomaranče pogosto olupijo.
Upoštevati morate, da jih ne bi bilo treba vključiti v naš razred pomaranč, če ne bi želeli spremeniti obstoječih metod »jesti« in »sok«. Metode iz razreda pomaranč preglasijo katero koli podobno metodo v razredu sadja. Če bi torej vse sadje jedli in sokali na enak način, nam teh metod ne bi bilo treba ustvarjati v razredu pomaranč.
Konstruktorji vlog igrajo pri dedovanju
Konstruktorje nadrejenih razredov privzeto podedujejo podrejeni razredi. Če je torej ustvarjen objekt podrejenega razreda, to pomeni, da se samodejno ustvari tudi predmet nadrejenega razreda.
Če se vrnemo k našemu primeru, vsakič, ko ustvarimo nov oranžni predmet, nastane tudi sadni predmet, ker je pomaranča sadje.
Ko se ustvari objekt podrejenega razreda, se v ozadju najprej pokliče konstruktor nadrejenega razreda, nato pa še konstruktor otroškega razreda. Če je v našem zgornjem otroškem razredu zgoraj ustvarjen oranžni predmet brez kakršnih koli parametrov, bo poklican privzeti konstruktor razreda sadja, ki mu bo sledil privzeti izvajalec oranžnega razreda.
Metoda "super" v našem primarnem konstruktorju zgoraj je potrebna, ker določa, da primarni konstruktor - in ne privzeti konstruktor - nadrejenega razreda sadja je treba poklicati, kadar je oranžen predmet s parametri ustvaril.
Zdaj lahko uporabljate dedovanje v Javi
Iz tega članka ste lahko izvedeli, kaj je dedovanje, kako deluje in zakaj je tako pomemben koncept pri programiranju. Zdaj lahko ustvarite razmerja dedovanja z uporabo programskega jezika Java. Poleg tega zdaj veste, kako obiti Javino pravilo dedovanja z ustvarjanjem odnosa starih staršev.
Avtor slike: Andreas Wohlfahrt /Pekslov
Pravilno oblikovanje objektno usmerjenega programiranja pomeni, da morate vedeti o dedovanju in kako lahko poenostavi kodiranje in zmanjša napake.
Preberite Naprej
- Programiranje
- Java
- Objektno usmerjeno programiranje

Kadeisha Kean je razvijalka programske opreme s polnim skladom in pisateljica tehničnih / tehnoloških tehnologij. Ima izrazito sposobnost poenostavitve nekaterih najbolj zapletenih tehnoloških konceptov; izdelujejo materiale, ki jih lahko zlahka razumejo vsi začetniki tehnologije. Navdušena je nad pisanjem, razvojem zanimive programske opreme in potovanjem po svetu (skozi dokumentarne filme).
Naročite se na naše novice
Pridružite se našemu glasilu za tehnične nasvete, preglede, brezplačne e-knjige in ekskluzivne ponudbe!
Še en korak…!
Potrdite svoj e-poštni naslov v e-poštnem sporočilu, ki smo vam ga pravkar poslali.