Wat zijn overerving, superklasse en subklasse in Java?

Een belangrijk concept bij objectgeoriënteerd programmeren is overerving. Het biedt een manier voor voorwerpen relaties met elkaar 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, klassen kunnen 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.

Een voorbeeld van Java-erfenis

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.

instagram viewer

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.

Wat is een superklasse?

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, opmaken van het bed 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 Student gegevens kan hebben over een studiegebied en een leerinstelling.

Voorbeeld van superklasse:

Stel u voor dat u een klasse Person definieert:

openbare klasse Persoon. { }

Een nieuwe klasse kan worden gemaakt door deze klasse uit te breiden:

public class Werknemer verlengt Persoon. { }

Er wordt gezegd dat de klasse Person de superklasse is van de klasse Employee.

Wat is een subklasse?

In de relatie tussen twee objecten is een subklasse de naam die wordt gegeven aan de klasse die overneemt van de superklasse. Hoewel het een beetje saai klinkt, onthoud dat het een meer gespecialiseerde versie van de superklasse is.

In het vorige voorbeeld zijn Student en Werknemer de subklassen.

Subklassen kunnen ook worden afgeleid als afgeleide klassen, onderliggende klassen of uitgebreide klassen.

Hoeveel subklassen mag ik hebben?

U kunt zoveel subklassen hebben als u wilt. Er is geen beperking aan hoeveel subklassen een superklasse kan hebben. Evenzo is er geen beperking op het aantal overervingsniveaus. Een hiërarchie van klassen kan worden gebouwd op een bepaald gebied van gemeenschappelijkheid.

Als u naar de Java API-bibliotheken kijkt, ziet u zelfs veel voorbeelden van overerving. Elke klasse in de API's wordt overgenomen van een klasse met de naam java.lang. Voorwerp. Wanneer u bijvoorbeeld een JFrame-object gebruikt, staat u aan het einde van een lange lijn van overerving:

 java.lang. Voorwerp. uitgebreid door java.awt. Component. uitgebreid door java.awt. Houder. uitgebreid door java.awt. Venster. uitgebreid door java.awt. Kader. uitgebreid door javax.swing. JFrame. 

Wanneer in Java een subklasse overerft van een superklasse, staat deze bekend als het "uitbreiden" van de superklasse.

Kan mijn subklasse vele superklassen overnemen?

Nee. In Java kan een subklasse slechts één superklasse verlengen.

Waarom overerving gebruiken?

Met overerving kunnen programmeurs code die ze al hebben geschreven hergebruiken. In het voorbeeld van de klasse Mens hoeven we geen nieuwe velden in de klasse Man en Vrouw te maken om het bloedtype vast te houden, omdat we het veld kunnen gebruiken dat is geërfd van de klasse Mens.

Een ander voordeel van het gebruik van overerving is dat we hiermee een subklasse kunnen behandelen alsof het een superklasse is. Stel dat een programma meerdere instanties van de objecten Man en Vrouw heeft gemaakt. Het programma moet mogelijk het slaapgedrag voor al deze objecten oproepen. Omdat het slaapgedrag een gedrag is van de menselijke superklasse, kunnen we alle man- en vrouwenobjecten bij elkaar groeperen en behandelen alsof het menselijke objecten zijn.