Abstracte klasse en interface worden beide primair gebruikt voor abstractie, maar ze verschillen erg van elkaar. Beide zijn het kerngedeelte van Java, maar hebben hun eigen toepassingsgebruik. Hoewel beide termen mogelijk synoniem zijn voor elkaar, kunnen ze niet onderling uitwisselbaar worden gebruikt.
Er zijn aanzienlijke verschillen tussen de twee. Hoewel een interfacemethode standaard abstract is, kan een abstract zowel abstracte als niet-abstracte methoden bevatten. Welnu, sinds Java 8 hebben interfaces ook methode-implementaties en kunnen ze zowel statische als standaardmethoden in Java hebben. Laten we het verschil tussen de twee in detail bestuderen.
Een abstracte klasse in Java is een klasse die abstract wordt verklaard - deze kan al dan niet abstracte methoden bevatten. Het lijkt veel op een Java-interface, behalve het feit dat het standaardmethode-implementatie kan bevatten. Net als bij objectgeoriënteerd programmeren, wordt abstractie in Java bereikt met behulp van abstracte klassen en interfaces. Op Java betekent abstraheren dat de irrelevante details van de gebruiker worden verborgen om zich alleen op de essentiële details te concentreren om de efficiëntie te vergroten en zo de complexiteit te verminderen. Het sleutelwoord "abstract" wordt gebruikt om een abstracte klasse te maken vlak voor het klasse sleutelwoord in de klassenverklaring.
Een abstracte klasse kan wel of niet abstractiemethoden bevatten (methoden zonder lichaam), maar als een klasse ten minste één abstractiemethode heeft, moet deze abstract worden verklaard. Niet-abstracte methoden kunnen echter ook alleen in een abstracte klasse worden gebruikt, maar alleen om standaardgedrag te implementeren. De methoden in een abstracte klasse kunnen toegangsmodifiers hebben zoals privé, openbaar, statisch en beveiligd, afhankelijk van het zichtbaarheidsniveau. Een abstracte klasse kan niet worden geïnstantieerd en biedt geen 100 procent abstractie vanwege het feit dat het een concrete methode kan hebben.
Een interface lijkt echter op een klasse, maar dat is het niet. Omdat Java geen meerdere overnamen ondersteunt, is een interface soms ideaal om als basis voor de klassenhiërarchie te dienen. Een interface is meer een blauwdruk van een klasse die ook wordt gebruikt om abstractie in Java te bereiken. Het bevat abstracte methoden en statische constanten. Eenvoudig gezegd is een interface een verzameling abstracte methoden die wordt gebruikt om een gedrag te specificeren dat de klasse moet implementeren. In tegenstelling tot de abstracte klasse biedt een interface volledige abstractie in Java. Het kan zowel methoden als variabelen hebben net als een klasse, maar de gedeclareerde methoden in de interface zijn standaard abstract.
Abstracte klasse | Interface |
Abstract trefwoord wordt gebruikt om een abstracte klasse te maken en deze kan met methoden worden gebruikt. | Interface-sleutelwoord wordt gebruikt om een interface te maken, maar deze kan niet worden gebruikt met methoden. |
Een klasse kan slechts één abstracte klasse uitbreiden. | Een klasse kan meer dan één interface implementeren. |
Een abstracte klasse kan zowel abstracte als niet-abstracte methoden hebben. | Een interface kan alleen abstracte methoden hebben. |
Variabelen zijn standaard niet definitief. Het kan niet-definitieve variabelen bevatten. | Variabelen zijn standaard definitief in een interface. |
Een abstracte klasse kan de implementatie van een interface verzorgen. | Een interface kan niet de implementatie van een abstracte klasse bieden. |
Het kan methoden hebben met implementaties. | Het biedt absolute abstractie en kan geen methode-implementaties hebben. |
Het kan openbare, privé, statische en beveiligde modifiers voor toegang hebben. | De methoden zijn impliciet openbaar en abstract in de Java-interface. |
Het biedt geen ondersteuning voor meerdere overnamen. | Het ondersteunt meerdere overervingen. |
Het is ideaal voor het hergebruik van codes en het perspectief van de evolutie. | Het is ideaal voor typeaangifte. |
Zowel abstracte klasse als interface worden gebruikt voor abstractie; ze hebben echter een groot aantal verschillen. Het belangrijkste verschil tussen de twee wordt aangedreven door abstractiemethoden. Hoewel de eerste al dan niet abstracte methoden heeft, is de laatste impliciet abstract. Een abstracte klasse kan zowel abstracte als niet-abstracte methoden hebben. Een interface daarentegen kan alleen abstracte methoden hebben, dus ze kunnen geen implementatie hebben, wat simpelweg betekent dat een interface geen niet-abstracte methoden kan hebben. Er kan geen abstracte klasse worden geïnstantieerd die het maken van een object verbiedt. Een interface aan de andere kant lijkt misschien op een klasse, maar dat is het niet.