Java: Arv, Superklasse og Underklasse
AMV Photo/Digital Vision/Getty Images
Et viktig konsept innen objektorientert programmering er arv. Det gir en vei for gjenstander å definere relasjoner til hverandre. Som navnet antyder, er et objekt i stand til å arve egenskaper fra et annet objekt.
Mer konkret er et objekt i stand til å overføre sin tilstand og atferd til sine barn. For at arv skal fungere, må gjenstandene ha egenskaper til felles med hverandre.
I Java , klasser kan tas fra andre klasser, som kan tas fra andre, og så videre. Dette er fordi de kan arve funksjoner fra klassen over den, helt opp til den øverste Objektklassen.
Et eksempel på Java-arv
La oss si at vi lager en klasse kalt Human som representerer våre fysiske egenskaper. Det er en generisk klasse som kan representere deg, meg eller hvem som helst i verden. Dens tilstand holder styr på ting som antall ben, antall armer og blodtype. Den har atferd som å spise, sove og gå.
Mennesket er bra for å få en generell følelse av hva som gjør oss alle like, men det kan for eksempel ikke fortelle meg om kjønnsforskjeller. For det må vi lage to nye klassetyper kalt mann og kvinne. Tilstanden og oppførselen til disse to klassene vil avvike fra hverandre på mange måter bortsett fra de som de arver fra Human.
Derfor lar arv oss inkludere foreldreklassens tilstand og atferd inn i barnets barn. Barneklassen kan deretter utvide tilstanden og atferden for å gjenspeile forskjellene den representerer. Det viktigste aspektet ved dette konseptet å huske er at barneklassen er en mer spesialisert versjon av forelderen.
Hva er en superklasse?
I forholdet mellom to objekter er en superklasse navnet som er gitt til klassen som blir arvet fra. Det høres ut som en super duper-klasse, men husk at det er den mer generiske versjonen. Bedre navn å bruke kan være basisklasse eller bare overordnet klasse.
For å ta et mer virkelighetseksempel denne gangen, kunne vi ha en superklasse kalt Person. Dens tilstand inneholder personens navn, adresse, høyde og vekt, og har atferd som å shoppe, re opp sengen og se på TV.
Vi kunne lage to nye klasser som arver fra Person som heter Student og Arbeider. De er mer spesialiserte versjoner fordi selv om de har navn, adresser, ser på TV og går på shopping, har de også egenskaper som er forskjellige fra hverandre.
Arbeider kan ha en stat som har en stillingstittel og arbeidssted, mens Student kan ha data om et studieområde og en læreinstitusjon.
Superklasse eksempel:
Tenk deg at du definerer en personklasse:
|_+_|En ny klasse kan opprettes ved å utvide denne klassen:
|_+_|
Personklassen sies å være superklassen til Ansattklassen.
Hva er en underklasse?
I forholdet mellom to objekter er en underklasse navnet som er gitt til klassen som arver fra superklassen. Selv om det høres litt trist ut, husk at det er en mer spesialisert versjon av superklassen.
I forrige eksempel er Student og Arbeider underklassene.
Underklasser kan også være kjent som avledede klasser, barneklasser eller utvidede klasser.
Hvor mange underklasser kan jeg ha?
Du kan ha så mange underklasser du vil. Det er ingen begrensning på hvor mange underklasser en superklasse kan ha. På samme måte er det ingen begrensning på antall nivåer av arv. Et hierarki av klasser kan bygges på et visst fellesområde.
Faktisk, hvis du ser på Java API-bibliotekene vil du se mange eksempler på arv. Hver klasse i API-ene er arvet fra en klasse kalt java.lang.Object. For eksempel, hver gang du bruker et JFrame-objekt, er du på slutten av en lang rekke med arv:
|_+_|I Java, når en underklasse arver fra en superklasse, er det kjent som å 'utvide' superklassen.
Kan underklassen min arve fra mange superklasser?
Nei. I Java kan en underklasse bare utvide en superklasse.
Hvorfor bruke arv?
Arv lar programmerere gjenbruke kode de allerede har skrevet. I eksempelet Human-klassen trenger vi ikke å opprette nye felt i Mann og Kvinne-klassen for å holde blodtypen fordi vi kan bruke den som er arvet fra Human-klassen.
En annen fordel med å bruke arv er at det lar oss behandle en underklasse som om den var en superklasse. La oss for eksempel si at et program har opprettet flere forekomster av Man og Woman-objektene. Programmet må kanskje kalle søvnatferden for alle disse objektene. Fordi søvnatferden er en oppførsel fra den menneskelige superklassen, kan vi gruppere alle mann- og kvinneobjektene sammen og behandle dem som om de var menneskelige objekter.