Hva er flere arver i Java?

OOP og arv

Bruken av objektorientert programmering bruker begrepet arv for å utvide funksjonaliteten til objekter. Tenk på når en programmerer lager et objekt. Senere kan du se at du trenger å lage et veldig likt objekt med bare små forskjeller (kanskje utvide funksjonaliteten til et tidligere objekt i en ny kontekst). Det er her arven dukker opp. Et objekt som en programmerer "henter" fra et annet "base" -objekt arver metodene og variablene i klassen, og kan deretter legge til mer funksjonalitet (som i følgende Java-eksempel):

offentlig klasse sfære {offentlig int radius; }

offentlig klasse Ball utvider sfære {offentlig strengfarge; // Ball legger til variabelen "farge", men bruker også variabelen "radius"}

Flere arv

På et tidspunkt kan en programmerer bli fristet til å utlede en enkelt klasse fra flere klasser. Dette er kjent som "flere arv", og selv om det virker nyttig, kan det føre til problemer, for eksempel det viktige "diamantproblemet." Dette problemet oppstår når to klasser arver fra samme klasse (for eksempel klasse B og C stammer fra klasse A), mens en annen klasse (D) stammer fra B og C. Når et objekt D opprettes, behandler systemet det som en type baseklasse (klasse "Ball" eller ball og "Sphere" eller sfære, for eksempel). I diamantproblemet kan ikke systemet bestemme hvilken klasse D (er det type ABD eller type ACD?) Som forårsaker problemer.

Java og flere arv

På grunn av problemer med flere arver tillater ikke Java det. Men i virkelighet kan klasser avledet fra flere baseklasser oppnås på en sikker måte ved bruk av "grensesnitt". Et grensesnitt ligner en klasse, men definerer ikke bare strukturen til klassen, men også dens reelle kode. En baseklasse som implementerer et grensesnitt "arver" ikke funksjonaliteten til grensesnittet: det lover bare bruken av strukturen. Siden en klasse som implementerer et grensesnitt ikke arver fra en annen klasse (og ikke er en type baseklasse), kan en programmerer implementere flere grensesnitt som bruker samme klasse.

Eksempel: arv og grensesnitt

Følgende eksempel viser forskjellen mellom arv etter objekter og et grensesnitt. En klasse som arver fra en annen får tilgang til baseklassen fordi den i utgangspunktet blir en type av den klassen (som i klassen "Ball" og "Sphere"). En klasse som implementerer et grensesnitt bare lover å implementere strukturen i grensesnittet: det er ikke en type det grensesnittet:

Grunnleggende grensesnitt {int doubleA (); // note: ingen reell kode er definert i grensesnittet}

offentlig klasse B implementerer Basic {

offentlig int;

public int doubleA () // klasse B må definere metoden "doubleA ()" for å implementere "Basic" {return a * 2;}}

Interessante Artikler