Hva er multippel arv i Java?

Utviklere designet Java fra grunnen av for å fungere som en komplett objektorientert programmeringsspråk. På grunn av dette, konsepter integrert i objektorientert programmering blitt ganske viktig i enkle Java-funksjonalitet. Spesielt begrepene klasse arv (og de problemene som oppstår skjema klassen arv) er grunnleggende bekymringer til Java programmerer. En av disse problemene, multippel arv, kan omgås med en forståelse av hvordan arv virker, og hvordan du bruker Java grensesnitt.

OOP og Arv

Objektorientert programmering bruker begrepet arv å utvide funksjonaliteten til stedene. Tenk når en programmerer oppretter et objekt; hun kan senere finner ut at hun må lage en veldig lignende gjenstand med bare små forskjeller (kanskje for å utvide funksjonaliteten til forrige objekt i en ny kontekst). Det er der arven kommer i en gjenstand som en programmerer "stammer" fra en annen "base" objekt arver metoder og variabler i den klassen, og kan deretter legge til mer funksjonalitet til den (som i følgende Java eksempel).:

public class Sphere {

public int radius;

}

public class Ball strekker Sphere {

public String farge; // Ball legger til "farge" variable, men bruker også "radius" variable

}

multippel arv

På et tidspunkt, kan en programmerer bli fristet til å utlede en enkelt klasse fra flere klasser. Dette er kjent som "multiple arv", og mens tilsynelatende nyttig, kan forårsake problemer, slik som den beryktede "diamant problem." Diamanten problemet oppstår når to klasser arver fra samme klasse (for eksempel klasse B og C som stammer fra klasse A), mens en annen klasse (D) arver fra både B og C. Når en D objekt opprettes, systemet behandler det som en type base klassen (klasse "Ball" er en "Sphere", for eksempel). I diamant problem, kan systemet ikke fastslå med bestemthet hvilken klasse D (det skriver ABD eller skriv ACD?) Som skaper problemer.

Java og multippel arv

På grunn av problemene med multippel arv, ikke Java ikke tillate multippel arv. Imidlertid kan faktisk avledet klasser fra flere baseklasser gjennomføres på en sikker måte ved bruk av "grenseflater". Et grensesnitt er lik en klasse, bortsett fra at det ikke bare definerer strukturen av klassen, men ikke selve koden. En basisklasse som implementerer et grensesnitt ikke nødvendigvis "arver" funksjonalitet i grensesnittet: det bare lover å bruke sin struktur. Fordi en klasse implementerer et grensesnitt ikke arver fra en annen klasse (og dette er ikke en type base klassen), deretter programmereren kan implementere flere grensesnitt ved hjelp av den samme klasse.

Eksempel: Arv og grensesnitt

Følgende eksempel viser forskjellen mellom objekt arv og et grensesnitt. Viktigere, en klasse som arver fra en annen får tilgang til basen klassen fordi det i hovedsak blir en type som klasse (som i "Ball" og "kule" klasser). En klasse som implementerer et grensesnitt lover bare å gjennomføre strukturen i grensesnittet: det er ikke en type som grensesnitt:

grensesnitt Basic {

int doubleA (); // Varsel: ingen faktiske koden er definert i grensesnittet

}

public class B implementerer Basic {

public int a;

public int doubleA () // klasse B må definere "doubleA ()" metode for å implementere "Basic"

{Return a * 2;}

}