Een belangrijk concept bij objectgeoriënteerd programmeren is overerving. Het biedt een manier voor objecten om relaties met elkaar te definiëren. Zoals de naam al doet vermoeden, kan een object kenmerken van een ander object erven.
Meer concreet kan een object zijn staat en gedragingen doorgeven aan zijn kinderen. Overerving werkt alleen als de objecten kenmerken met elkaar gemeen hebben.
In Java kunnen klassen worden overgenomen uit andere klassen, die kunnen worden overgenomen van anderen, enzovoort. Dit komt omdat ze functies van de klasse erboven kunnen erven, helemaal tot aan de bovenste klasse Object.
Laten we zeggen dat we een klasse genaamd Mens maken die onze fysieke kenmerken vertegenwoordigt. Het is een generieke klasse die jou, mij of iemand anders ter wereld kan vertegenwoordigen. De status houdt dingen bij zoals het aantal benen, het aantal armen en de bloedgroep. Het heeft gedrag zoals eten, slapen en lopen.
De mens is goed om een algemeen beeld te krijgen van wat ons allemaal hetzelfde maakt, maar het kan me bijvoorbeeld niet vertellen over genderverschillen. Daarvoor zouden we twee nieuwe klassen moeten maken, genaamd Man en Vrouw. De staat en het gedrag van deze twee klassen zullen op veel manieren van elkaar verschillen, behalve die ze van Mens erven.
Daarom stelt erfenis ons in staat om de staat en het gedrag van de ouderklasse in zijn kind op te nemen. De kindklasse kan vervolgens de status en het gedrag uitbreiden om de verschillen weer te geven die het vertegenwoordigt. Het belangrijkste aspect van dit concept om te onthouden is dat de kindklasse een meer gespecialiseerde versie van de ouder is.
In de relatie tussen twee objecten is een superklasse de naam die wordt gegeven aan de klasse waarvan wordt geërfd. Het klinkt als een superklare klasse, maar onthoud dat het de meer generieke versie is. Betere namen om te gebruiken kunnen basisklasse of gewoon ouderklasse zijn.
Om dit keer een meer realistisch voorbeeld te nemen, zouden we een superklasse kunnen hebben die Persoon heet. De status bevat de naam, het adres, de lengte en het gewicht van de persoon en heeft gedragingen zoals winkelen, het bed opmaken en tv kijken.
We zouden twee nieuwe klassen kunnen maken die erven van Persoon genaamd Student en Werknemer. Het zijn meer gespecialiseerde versies, want hoewel ze namen, adressen hebben, tv kijken en gaan winkelen, hebben ze ook kenmerken die van elkaar verschillen.
Werknemer kan een staat hebben met een functietitel en plaats van tewerkstelling, terwijl de student gegevens over een studiegebied en een leerinstelling kan hebben.
Stel je voor dat je een klasse Person definieert:
openbare klas persoon
Een nieuwe klasse kan worden gemaakt door deze klasse uit te breiden:
public class medewerker verlengt persoon
Van de klasse Person wordt gezegd dat deze de superklasse is van de klasse Employee.