Hvad er flere arv i Java?

OOP og arv

Brug af objektorienteret programmering bruger konceptet om arv til at udvide objekternes funktionalitet. Tænk på, når en programmør opretter et objekt. Senere kan du se, at du er nødt til at oprette et meget lignende objekt med kun små forskelle (måske udvide funktionaliteten af ​​et tidligere objekt i en ny kontekst). Det er her arven vises. Et objekt, som en programmerer "henter" fra et andet "base" -objekt, arver klassens metoder og variabler og kan derefter tilføje mere funktionalitet (som i det følgende Java-eksempel):

offentlig klasse sfære {offentlig int radius; }

offentlig klasse bold udvider sfære {offentlig streng farve; // Ball tilføjer variablen "farve", men bruger også variablen "radius"}

Flere arv

På et tidspunkt kan en programmerer blive fristet til at udlede en enkelt klasse fra flere klasser. Dette er kendt som "multiple arv", og selvom det synes nyttigt, kan det forårsage problemer, såsom det vigtige "diamantproblem." Dette problem opstår, når to klasser arver fra den samme klasse (såsom klasse B og C stammer fra klasse A), mens en anden klasse (D) stammer fra B og C. Når et objekt D oprettes, behandler systemet det som en type baseklasse (klasse "Kugle" eller kugle og "Kugle" eller kugle, for eksempel). I diamantproblemet kan systemet ikke afgøre, hvilken klasse D (er det type ABD eller type ACD?), Der skaber problemer.

Java og flere arv

På grund af problemer med flere arver tillader Java det ikke. Men i virkelighedsklasser, der stammer fra flere baseklasser, kan opnås på en sikker måde ved hjælp af "grænseflader". En grænseflade ligner en klasse, men definerer ikke kun klassens struktur, men også dens reelle kode. En baseklasse, der implementerer en grænseflade "arver ikke" funktionaliteten af ​​grænsefladen: den lover kun brugen af ​​dens struktur. Da en klasse, der implementerer en grænseflade ikke arver fra en anden klasse (og ikke er en type baseklasse), kan en programmerer implementere flere grænseflader, der bruger den samme klasse.

Eksempel: arv og grænseflader

Følgende eksempel viser forskellen mellem arv af objekter og en grænseflade. En klasse, der arver fra en anden, får adgang til baseklassen, fordi den dybest set bliver en type af den klasse (som i klassen "Kugle" og "Kugle"). En klasse, der implementerer en grænseflade, lover kun at implementere strukturen i dets interface: det er ikke en type af det interface:

Grundlæggende interface {int doubleA (); // note: der er ikke defineret nogen reel kode i grænsefladen}

offentlig klasse B implementerer Basic {

offentlig int a;

public int doubleA () // klasse B skal definere metoden "doubleA ()" til at implementere "Basic" {return a * 2;}}

Interessante Artikler