Een abstracte klasse lijkt veel op een interface, maar het concept is een beetje verwarrend voor de beginners van OOP. Conceptueel gezien ziet een abstracte klasse er net zo uit als een interface, natuurlijk, zonder enige implementatie, maar ze hebben wel een groot aantal verschillen. Hoewel een abstracte klasse geheel of gedeeltelijk kan worden geïmplementeerd, moet een interface volledig worden geïmplementeerd. Welnu, het meest opvallende verschil tussen de twee is dat een abstracte klasse standaardimplementatie kan hebben, terwijl een interface alleen de definitie van methoden is die alleen de ledendeclaraties bevat. Laten we de theoretische aspecten van beide in detail bespreken.
Een abstracte klasse is een speciaal type klasse dat als basis voor andere klassen fungeert en niet kan worden geïnstantieerd. De implementatielogica van een abstracte klasse wordt geleverd door de afgeleide klassen. Om een class abstract te maken, wordt de "abstracte" modifier gebruikt, wat betekent dat een ontbrekende implementatie moet worden geïmplementeerd in de klasse die daarvan is afgeleid. Het bevat zowel abstracte als niet-abstracte leden. Een abstracte klasse is bedoeld om basisfunctionaliteit te bieden die verder kan worden gedeeld en opgeheven door meerdere afgeleide klassen. Het is handig om elke vorm van codeduplicatie te vermijden. Ze lijken erg op interfaces, maar met extra functionaliteit.
Een interface daarentegen is geen klasse die alleen de handtekening van functionaliteit bevat. Het is een patroon zonder implementatie. Conceptueel gesproken is het alleen de definitie van methoden die alleen de verklaring van leden bevat. Het is een lege shell die de implementatie van zijn leden niet bevat. Het is als een abstracte basisklasse die alleen abstracte leden bevat, zoals methoden, gebeurtenissen, indexeerders, eigenschappen, enz. Het kan niet rechtstreeks worden geïnstantieerd en de leden ervan kunnen door elke klasse worden geïmplementeerd. Bovendien kunnen meerdere interfaces door een klasse worden geïmplementeerd, maar een klasse kan alleen een enkele klasse erven.
Abstracte klasse | Interface |
Een abstracte klasse kan alle toegangsmodificators hebben voor lidverklaring van functies, subs en eigenschappen. | Het is een interface niet toegestaan om toegangsmodificatoren te hebben voor het declareren van functies, subs, eigenschappen, etc. Alle leden worden verondersteld als impliciet publiek. |
Een klas kan hoogstens één abstracte klasse gebruiken. | Een klasse kan een willekeurig aantal interfaces erven. |
Meerdere overerving wordt niet ondersteund in abstracte klasse. | Een interface kan meerdere overerving ondersteunen. |
Technisch gezien is het een klasse die al dan niet zowel de definitie als de implementatie ervan bevat. | Een interface kan alleen de handtekening van de functionaliteit hebben, dus het is in feite een lege schaal. |
Een abstracte klasse kan leden bevatten. consts, gedefinieerde methoden en methode-stubs. | Een interface kan alleen methoden en consts bevatten. |
Het definieert de kernidentiteit van een klasse en wordt gebruikt om objecten van hetzelfde gegevenstype te beschrijven. | Het wordt gebruikt om de perifere mogelijkheden van een klasse te beschrijven. |
Leden van een abstracte klasse kunnen niet statisch zijn tenzij het een volledig lid is. | Leden van een interface kunnen niet statisch zijn. |
Het is ideaal voor implementaties van hetzelfde type en gemeenschappelijk gedrag. | Het is beter om interfaces te gebruiken als verschillende implementaties alleen methodenhandtekeningen delen. |
Het kan constructordeclaratie hebben. | Het kan geen verklaring van constructeur hebben. |
Een abstracte klasse heeft vooraf gedefinieerde velden en constranten. | Velden kunnen niet worden gedefinieerd in interfaces. |
Het kan zowel abstracte als niet-abstracte methoden hebben. | Het kan alleen abstracte methoden hebben. |
Wat is het verschil tussen een abstracte klasse en een interface? Dit is waarschijnlijk een van de meest gestelde vragen in elk technisch interview. Je zult waarschijnlijk een overvloed aan informatie vinden over abstracte klassen en interfaces in elke C # tutorial, echter, het verschil begrijpen tussen de twee is best lastig. U kunt alle informatie consolideren die u kunt vinden en nog steeds niet genoeg kunt krijgen. Nou, conceptueel zijn beide de belangrijkste termen in programmeren en zijn ze hetzelfde, maar ze verschillen erg in termen van functionaliteit. Hoewel een abstracte klasse een speciaal type klasse is dat als basis dient voor andere klassen, is een interface daarentegen slechts een lege schaal met alleen ledenverklaringen.