Abstracte klasse versus overerving
Abstracte klasse en Overerving zijn twee belangrijke objectgeoriënteerde concepten die te vinden zijn in veel objectgeoriënteerde programmeertalen zoals Java. Abstracte klasse kan worden beschouwd als een abstracte versie van een reguliere (concrete) klas, terwijl overerving nieuwe klassen in staat stelt om andere klassen uit te breiden. Abstracte klasse is een klasse die niet kan worden geïnitialiseerd maar kan worden uitgebreid. Dus, abstracte klassen zijn alleen zinvol als de programmeertaal overerving ondersteunt. In Java worden abstracte klassen gedeclareerd met Abstract trefwoord, terwijl het trefwoord Extends wordt gebruikt voor het overerven van een (super) klasse.
Wat is Abstracte Klasse?
Doorgaans kunnen abstracte klassen, ook bekend als abstracte basisklassen (ABC), niet worden geïnstantieerd (een exemplaar van die klasse kan niet worden gemaakt). Dus, abstracte klassen zijn alleen zinvol als de programmeertaal overerving ondersteunt (mogelijkheid om subklassen te maken door een klasse uit te breiden). Abstracte klassen vertegenwoordigen meestal een abstract concept of entiteit met gedeeltelijke of geen implementatie. Daarom werken abstracte klassen als bovenliggende klassen waaruit onderliggende klassen zijn afgeleid, zodat de onderliggende klasse de onvolledige kenmerken van de bovenliggende klasse deelt en functionaliteit kan worden toegevoegd om deze te voltooien.
Abstracte klassen kunnen abstracte methoden bevatten. Subklassen die een abstracte klasse uitbreiden, kunnen deze (overgenomen) abstracte methoden implementeren. Als de onderliggende klasse al dergelijke abstracte methoden implementeert, is het een concrete klasse. Maar als dat niet het geval is, wordt de kinderklasse ook een abstracte klasse. Wat dit alles betekent is dat, wanneer de programmeur een klasse nomineert als een Abstract, ze zegt dat de klas onvolledig zal zijn en elementen bevat die moeten worden aangevuld door de overervende subklassen. Dit is een leuke manier om een contract tussen twee programmeurs te maken, wat taken in softwareontwikkeling vereenvoudigt. De programmeur, die de code schrijft om te erven, moet de methodedefinities precies volgen (maar kan natuurlijk een eigen implementatie hebben).
Wat is overerving?
Inheritance is een objectgeoriënteerd concept, waardoor nieuwe klassen andere klassen kunnen uitbreiden. Extends keyword wordt gebruikt om het concept van overerving in Java-programmeertaal te implementeren. Overerving biedt in essentie hergebruik van code door uitbreiding van eigenschappen en gedrag van een bestaande klasse door een nieuw gedefinieerde klasse. Wanneer een nieuwe subklasse (of afgeleide klasse) een superklasse (of bovenliggende klasse) uitbreidt, dan zal die subklasse alle attributen en methoden van de superklasse erven. De subklasse kan optioneel het gedrag overschrijven (nieuwe of uitgebreide functionaliteit verschaffen aan methoden) die zijn overgenomen van de bovenliggende klasse. Typisch kan een subklasse niet meerdere superklassen uitbreiden (bijvoorbeeld in Java). Daarom kunt u uitbreidingen niet gebruiken voor meerdere overerving. Als u meerdere overerving wilt hebben, moet u interfaces gebruiken.
Wat is het verschil tussen Abstracte klasse en Erfenis?
Abstracte klassen vertegenwoordigen meestal een abstract concept of een entiteit met gedeeltelijke of geen implementatie. Met overerving kunnen nieuwe klassen andere klassen uitbreiden. Omdat abstracte klassen niet kunnen worden geïnstantieerd, moet u het concept van overerving gebruiken om abstracte klassen te gebruiken. Anders heeft een abstracte klasse geen zin. Abstracte klassen kunnen abstracte methoden bevatten en wanneer de klasse wordt uitgebreid, worden alle methoden (abstract en concreet) overgenomen. De overgeërfde klasse kan een of alle methoden implementeren. Als niet alle abstracte methoden zijn geïmplementeerd, wordt die klasse ook een abstracte klasse. Een klasse kan niet erven van meer dan één abstracte klasse (dit is geen kwaliteit van abstracte klassen per se, maar eerder een beperking van overerving).