? Udviklere designet Java fra jorden op til at fungere som en komplet objektorienteret programmeringssprog. På grund af dette , bliver begreber integreret til objektorienteret programmering ret vigtigt i grundlæggende Java -funktionalitet. Især begreberne klasse arv (og de problemer, der opstår formular klasse arv ) er grundlæggende bekymringer til Java programmør. Et af disse problemer , multipel nedarvning, kan omgås med en forståelse af, hvordan arv virker, og hvordan du bruger Java interfaces . OOP og Inheritance
objektorienteret programmering bruger arvebegrebet at udvide funktionaliteten af objekter. Overveje, når en programmør opretter et objekt , kan hun senere finder , at hun skal skabe en meget lignende objekt med kun små forskelle (måske at udvide funktionaliteten af den tidligere objekt i en ny sammenhæng ) . Det er her nedarvning kommer i. En genstand, som en programmør "stammer " fra en anden "base " objekt arver metoder og variabler for denne klasse , og kan derefter tilføje mere funktionalitet til det ( som i det følgende Java eksempel) : Hej
public class Sphere {
offentlig int radius
}
public class Ball udvider Sphere {
offentlig string farve //Ball tilføjer den "farve" variabel, men bruger også " radius " variable
}
Multiple Inheritance
på et tidspunkt , måske en programmør bliver fristet at udlede en enkelt klasse fra flere klasser. Dette er kendt som " multipel nedarvning ", og samtidig tilsyneladende nyttigt, kan forårsage problemer, såsom den berygtede " diamond problem. " Diamanten Problemet opstår, når to klasser arver fra samme klasse (såsom klasse B og C stammer fra klasse A) , mens en anden klasse (D) arver fra både B og C. Når en D objekt er oprettet , systemet behandler det som en type af basen klasse ( class " Ball " er en " Sphere ", for eksempel). I diamant problemet , kan systemet ikke bestemme afgørende hvilken klasse D er ( det er Abd eller type ACD ?) , Som forårsager problemer.
Java og multipel nedarvning
grund af problemerne med multipel nedarvning , er Java ikke tillader multipel nedarvning . Dog kan faktisk stammer klasser fra flere stamklasser opnås på en sikker måde ved hjælp af " grænseflader ". En grænseflade svarer til en klasse , bortset fra at det kun definerer strukturen af klassen , men ikke selve koden . En base klasse, der implementerer en grænseflade ikke nødvendigvis " arve " funktionaliteten af interface: kun lover at bruge sin struktur. Fordi en klasse der indeholder en grænseflade ikke arver fra en anden klasse ( og dette er ikke en type af basen klasse) , så programmøren kan implementere flere interfaces ved hjælp af samme klasse
Eksempel: . Arv og interfaces
følgende eksempel viser forskellen mellem objektet arv og en grænseflade . Vigtigere er det, en klasse, der arver fra en anden får adgang til basen klassen , fordi det hovedsageligt bliver en type af denne klasse ( som i " Ball " og " Sphere " klasser ) . En klasse, der implementerer en grænseflade kun lover at gennemføre struktur interface: det er ikke en type af denne grænseflade : Hej
grænseflade Basic {
int doubleA () //bekendtgørelse : nej konkrete kode er defineret i interfacet
}
public class B implementerer Basic {
offentlig int a;
offentlig int doubleA () //Klasse B skal definere " doubleA ()" metode til at gennemføre " Basic "
{ returnere en * 2 ;}
}