? 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 form klasse arv) er grunnleggende bekymringer til Java-programmerer . Ett 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 gjenstander . Vurdere 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 arv kommer inn Et objekt som en programmerer "stammer " fra en annen "base" objektet arver metodene og variablene 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 {
offentlige streng farge ; //Ball legger "farge" variabel, men også bruker " radius " variable
}
multippel arv
på et tidspunkt , kan en programmerer bli fristet å utlede en enkelt klasse fra flere klasser . Dette er kjent som " multippel arv ", og mens tilsynelatende nyttig, kan forårsake problemer , slik som den notoriske "diamond problem . " Diamant problemet oppstår når to klasser arver fra samme klasse (som 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 , vil systemet behandle det som en type base klassen (klasse " Ball" er en " Sphere ", for eksempel) . I diamant problem , kan systemet ikke fastslå avgjørende hvilken klasse D er ( er å skrive det 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 skriver seg fra flere klasser grunnklasser oppnås på en sikker måte ved hjelp av " grenseflater ". Et grensesnitt er lik en klasse , bortsett fra at den ikke bare definerer strukturen for den klasse, men ikke selve koden . En base klasse som implementerer et grensesnitt betyr ikke nødvendigvis " arve " funksjonaliteten av grensesnittet : det lover kun å bruke sin struktur . Fordi en klasse implementere et grensesnitt ikke arver fra en annen klasse ( og dette er ikke en type base klassen ), så programmerer kan implementere flere grensesnitt ved hjelp av samme klasse
. Eksempel: Arv og grensesnitt
eksempelet nedenfor 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 " Sphere " klasser ) . En klasse som implementerer et grensesnitt lover kun å implementere strukturen av grensesnittet : det er ikke en type som grensesnitt : en
grensesnitt Basic {
int doubleA (); //varsel : nei selve koden er definert i grensesnittet
}
public class B implementerer Basic {
public int a;
public int doubleA () //klasse B må definere " doubleA ( ) "-metoden for å implementere "Basic"
{return a * 2 ;}
}