Ontwikkelaars ontworpen Java uit de grond omhoog om op te treden als een volledig object-georiënteerde programmeertaal. Vanwege dit, concepten integraal deel uitmaakt van object-georiënteerd programmeren vrij belangrijk in Java basisfunctionaliteit geworden. Bijzonder, zijn concepten van klassenovererving (en de problemen die zich formulier klassenovererving voordoen) fundamentele zorgen voor de Java-programmeur. Een van deze problemen, meervoudige overerving, kan worden omzeild met een begrip van hoe overname werkt, en het gebruik van Java-interfaces.
OOP en overerving
Object Oriented Programming gebruikt het concept van overerving om uit te breiden de functionaliteit van objecten. Overwegen wanneer een programmeur maakt een object; ze kan later vinden dat ze een zeer vergelijkbaar object moet maken met slechts in geringe mate verschillen (misschien uit te breiden de functionaliteit van het vorige object in een nieuwe context). Dit is waar de overname komen. Een object dat een programmeur "afgeleid" van een ander "base" object erft de methoden en variabelen van die klasse, en kan vervolgens meer functionaliteit aan toevoegen (zoals in het volgende voorbeeld van Java):
openbare klasse bol {}
public int straal;
}
openbare klasse bal breidt bol {}
openbare tekenreeks kleur; Bal voegt de variabele "kleur", maar maakt ook gebruik van de variabele "radius"
}
Meervoudige overerving
Op een gegeven moment zou kunnen een programmeur worden geneigd om een enkele klasse ontlenen in meerdere klassen. Dit staat bekend als de "meervoudige overerving" en terwijl schijnbaar nuttig, kunnen problemen veroorzaken, zoals de beruchte "diamant probleem." De diamant probleem treedt op wanneer twee klassen overnemen van dezelfde klasse (zoals klasse B en C die voortvloeien uit klasse A), terwijl een ander (D) klasse overerft van zowel B en C. Wanneer een D-object is gemaakt, het systeem beschouwd als een soort van de basisklasse (klasse "Bal" is een "Sphere", bijvoorbeeld). In het probleem van de diamant, het systeem niet kan bepalen resoluut welke klasse D is (is het type A-B-D of type A-C-D?) waardoor problemen.
Java en meervoudige overerving
Vanwege de problemen met veelvoudige overerving staat Java geen veelvoudige overerving. Echter, de klassen eigenlijk uit meerdere basisklassen voortvloeiende kan worden bereikt op een veilige manier door het gebruik van "interfaces". Een interface is vergelijkbaar met een klasse, behalve dat het doet alleen de structuur van de klasse, maar niet de eigenlijke code wordt gedefinieerd. Een basis klasse die een interface implementeert niet noodzakelijkerwijs "overgenomen" de functionaliteit van de interface: het belooft alleen gebruik van de structuur. Omdat een klasse die een interface implementeren niet van een andere klasse overgenomen (en dit niet een type van de klasse base is), dan is de programmeur kunt implementeren meerdere interfaces met behulp van dezelfde klasse.
Voorbeeld: Erfenis en Interfaces
In het volgende voorbeeld toont het verschil tussen objectovername en een interface. Nog belangrijker is, krijgt een klasse die van een andere overerft toegang tot de basisklasse omdat het in wezen wordt een type van die klasse (zoals in de klassen "Bal" en "Sphere"). Een klasse die een interface implementeert alleen belooft om de structuur van de interface: het is niet een soort die interface:
Interface Basic {}
int doubleA(); Merk op: geen werkelijke code wordt gedefinieerd in de interface
}
openbare klasse B implementeert Basic {}
public int;
public int doubleA() //Class B moet het definiëren van de "doubleA()"-methode voor de uitvoering van "Basic"
{terug een * 2;}
}