Verschil tussen virtuele en abstracte

Anonim

Virtual vs Abstract

Virtueel en Abstract zijn, worden twee zoekwoorden gebruikt in de meeste objectgerichte (OO) programmeertalen, zoals Java en C #. Hoewel er kleine verschillen bestaan ​​in wat het in verschillende talen betekent, bieden zowel virtuele als abstracte trefwoorden een gevoel van gedeeltelijke implementatie aan de entiteiten waaraan zij hechten.

Abstract

Typisch kunnen abstracte klassen, ook bekend als abstracte basisklassen (ABC), niet georganiseerd worden (een voorbeeld van die klasse kan niet worden gecreëerd). Dus, abstracte lessen zijn alleen zinvol om te hebben als de programmeertaal armoede ondersteunt (mogelijkheid om subclasses te creëren om een ​​klas uit te breiden). Abstracte lessen vertegenwoordigen gewoonlijk een abstract concept of entiteit met gedeeltelijke of geen implementatie. Daarom werken abstracte klassen als ouderklassen waaruit de kinderlessen zijn afgeleid, zodat de kindklasse de onvolledige kenmerken van de ouderklasse zal delen en de functionaliteit kan worden toegevoegd om ze te voltooien. Abstracte lessen kunnen abstracte methoden bevatten. Subklassen die een abstracte klasse uitbreiden, kunnen deze (geërfde) abstracte methoden implementeren. Als de kindklasse alle dergelijke abstracte methoden implementeert, is het een concrete klas. Maar als dat niet het geval is, wordt de kinderklasse ook een abstracte klas. Wat dit allemaal betekent is dat wanneer de programmeur een klas als een abstract benoemt, zegt ze dat de les onvolledig zal zijn en het zal elementen bevatten die door de erfelijke subklasse moeten worden ingevuld. Dit is een leuke manier om een ​​contract te maken tussen twee programmeurs, die taken vereisen bij de ontwikkeling van software. De programmeur, die code schrijft om te erfenis, moet de methode-definities precies volgen (maar natuurlijk kan ze zelf implementeren). In Java en C # worden abstracte klassen en methoden verklaard met behulp van het abstracte zoekwoord.

Virtueel

Virtuele methoden / functies bieden de mogelijkheid om zijn gedrag door een erfelijke klasse te overschrijven (met een functie met dezelfde handtekening). Het concept van virtuele functie is belangrijk in het volgende scenario. Stel dat een klas wordt afgeleid door een kindklasse, dan kan er, wanneer een voorwerp van de afgeleide klas gebruikt wordt, een object van de basisklas of de afgeleide klas verwijzen. Maar methode oproep gedrag kan dubbelzinnig zijn als de basis klasse methoden worden overschreden. Dus, om deze dubbelzinnigheid op te lossen, wordt Virtual Keyword gebruikt. Als de methode gemarkeerd is Virtual, dan wordt de functie van de afgeleide klasse (indien aanwezig) genoemd, anders wordt de functie van de basisklasse genoemd. Bijvoorbeeld, in C ++ wordt Virtual Keyword precies voor dit doel gebruikt. In C # wordt het virtuele zoekwoord op een vergelijkbare manier gebruikt, maar bovendien moet de overschrijving van het zoekwoord worden gebruikt om alle override-methoden te wijzigen.Maar in Java is er geen expliciet virtueel zoekwoord. Alle niet-statische methoden worden beschouwd als Virtual. Virtuele functies zonder lichaam worden Pure Virtual functies genoemd. In Java en C # zijn abstracte methoden in feite pure virtuele.

Verschil tussen Virtual en Abstract

Hoewel Abstract en Virtual twee sleutelwoorden / concepten zijn die een betekenis geven van onvolledige implementatie aan de bijbehorende entiteiten, hebben ze hun verschillen. Abstracte methoden (die moeten worden gedefinieerd in abstracte klassen) hebben helemaal geen implementatie, terwijl virtuele methoden een implementatie kunnen hebben. Als abstracte methoden worden uitgebreid door een concrete klasse, moeten alle geërfde abstracte methoden worden geïmplementeerd, terwijl er overgeërfd worden. Virtuele methoden kunnen of niet worden overschreden.