Cursusinhoud
Java OOP
Java OOP
Abstracte Klasse Versus Interface
Welke te kiezen?
Uit de voorgaande hoofdstukken heb je wellicht opgemerkt dat abstract classes
en interfaces
vrij vergelijkbaar zijn. Er zijn echter verschillen tussen beide. Om direct ter zake te komen: in de praktijk worden interfaces vaak verkozen boven abstracte klassen. Laten we begrijpen waarom dit zo is.
Wat is het verschil?
Om te beginnen moeten we de verschillen tussen een abstracte klasse en een interface begrijpen. Laten we de lijst doornemen:
Syntaxis:
abstract class
bij het declareren van een abstracte klasse eninterface
bij het declareren van een interface;Overervingssleutelwoord:
extends
voor het erven van een abstracte klasse, enimplements
voor het erven van een interface;Namen voor subklassen: Een subklasse van een
abstract class
wordt aangeduid als een subklasse of overervende klasse, terwijl een subklasse van eeninterface
een klasse - implementatie wordt genoemd;Aantal overervingen: Je kunt van slechts één abstracte klasse erven, terwijl je van meerdere interfaces kunt erven;
Een
abstract class
kan zowel geïmplementeerde als abstracte methoden bevatten. Vanaf Java 8 kunnen interfaces ookdefault
-methoden hebben, wat later in deze sectie wordt besproken;Methoden in een abstracte klasse kunnen elke toegangsmodifier hebben, terwijl in interfaces alleen de
public
toegangsmodifier is toegestaan.
Opmerking
We kunnen ook gelijktijdig erven van een abstracte klasse en een interface implementeren. Eerst gebruiken we het sleutelwoord
extends
, daarnaimplements
. De syntaxis ziet er als volgt uit:class ClassName extends AbstractClass implements Interface {}
Eenvoudig gezegd kun je een abstracte klasse zien als een klasse die bepaalde functionaliteit biedt en bepaalde regels afdwingt, maar sommige delen overlaat aan zijn subklassen om af te maken. Een interface daarentegen is als een checklist die een klasse moet vervullen, waarbij wordt gespecificeerd welke methoden aanwezig moeten zijn, zonder daadwerkelijke code te leveren.
Bedankt voor je feedback!