Kaj je večkratno dedovanje na Javi?

OOP in dedovanje

Uporaba objektno usmerjenega programiranja uporablja koncept dedovanja za razširitev funkcionalnosti predmetov. Pomislite, kdaj programer ustvari predmet. Kasneje lahko vidite, da morate ustvariti zelo podoben predmet z le majhnimi razlikami (morda razširite funkcionalnost prejšnjega predmeta v novem kontekstu). Tu se pojavi dedovanje. Predmet, ki ga programer "izpelje" iz drugega "osnovnega" predmeta, podeduje metode in spremenljivke razreda in nato lahko doda več funkcionalnosti (kot v naslednjem primeru Java):

sfera javnega razreda {public int radius; }

Javni razred Ball razširi sfero {javna barva nizov; // Ball doda spremenljivko "color", uporablja pa tudi spremenljivko "radius"}

Večkratno dedovanje

V nekem trenutku se lahko programer zamika, da bi iz enega razreda izpeljal en sam razred. To je znano kot "večkratno dedovanje" in čeprav se zdi koristno, lahko povzroči težave, kot je pomembna "težava z diamanti". Do te težave pride, ko dva razreda podedujeta iz istega razreda (na primer razreda B in C izhajata iz razreda A), drugi razred (D) pa izhaja iz B in C. Ko je predmet D ustvarjen, ga sistem obravnava kot vrsto osnovnega razreda (na primer razred "Ball" ali žoga in "Sphere" ali krogla). Pri težavi z diamanti sistem ne more odločilno določiti, kateri razred D (je to ABD ali tip ACD?) Povzroča težave.

Java in večkratno dedovanje

Java zaradi težav z večkratnim dedovanjem tega ne omogoča. V resnici pa je mogoče razrede, ki izhajajo iz več osnovnih razredov, varno doseči z uporabo "vmesnikov". Vmesnik je podoben razredu, vendar ne določa le strukture razreda, temveč tudi njegovo dejansko kodo. Bazni razred, ki izvaja vmesnik, ne nujno "podeduje" funkcionalnosti vmesnika: le obljublja uporabo njegove strukture. Ker razred, ki izvaja vmesnik, ne podeduje od drugega razreda (in ni vrsta osnovnega razreda), lahko programer izvaja več vmesnikov z istim razredom.

Primer: dedovanje in vmesniki

Naslednji primer prikazuje razliko med dedovanjem predmetov in vmesnikom. Razred, ki podeduje od drugega, dobi dostop do osnovnega razreda, ker v bistvu postane vrsta tega razreda (kot v razredih "Ball" in "Sphere"). Razred, ki izvaja vmesnik, samo obljublja, da bo uporabil strukturo svojega vmesnika: ni tip tega vmesnika:

Osnovni vmesnik {int doubleA (); // opomba: v vmesniku ni določena resnična koda}

javni razred B izvaja osnovno {

javni int a;

javni int doubleA () // razred B mora definirati metodo "doubleA ()" za izvedbo "Basic" {return a * 2;}}

Zanimivi Članki