Virtuell gegen abstrakt
Virtuell und Abstrakt sind zwei Schlüsselwörter, die in den meisten objektorientierten Programmiersprachen (OO) wie Java und C # verwendet werden. Obwohl es geringfügige Unterschiede in der Bedeutung in verschiedenen Sprachen gibt, bieten sowohl virtuelle als auch abstrakte Schlüsselwörter den Entitäten, an die sie angehängt sind, ein Gefühl der teilweisen Implementierung.
Abstrakt
In der Regel können abstrakte Klassen, auch als abstrakte Basisklassen (ABC) bezeichnet, nicht instanziiert werden (eine Instanz dieser Klasse kann nicht erstellt werden). Daher sind abstrakte Klassen nur dann sinnvoll, wenn die Programmiersprache die Vererbung unterstützt (Möglichkeit, Unterklassen aus der Erweiterung einer Klasse zu erstellen). Abstrakte Klassen repräsentieren normalerweise ein abstraktes Konzept oder eine abstrakte Entität mit teilweiser oder keiner Implementierung. Daher fungieren abstrakte Klassen als übergeordnete Klassen, von denen untergeordnete Klassen abgeleitet werden, sodass die untergeordnete Klasse die unvollständigen Merkmale der übergeordneten Klasse gemeinsam nutzt und Funktionen hinzugefügt werden können, um sie zu vervollständigen. Abstrakte Klassen können abstrakte Methoden enthalten. Unterklassen, die eine abstrakte Klasse erweitern, können diese (geerbten) abstrakten Methoden implementieren. Wenn die untergeordnete Klasse alle diese abstrakten Methoden implementiert, handelt es sich um eine konkrete Klasse. Aber wenn nicht,Die untergeordnete Klasse wird auch zu einer abstrakten Klasse. Dies alles bedeutet, dass die Programmiererin, wenn sie eine Klasse als Zusammenfassung nominiert, sagt, dass die Klasse unvollständig ist und Elemente enthält, die von den ererbenden Unterklassen vervollständigt werden müssen. Dies ist eine gute Möglichkeit, einen Vertrag zwischen zwei Programmierern zu erstellen, was die Aufgaben in der Softwareentwicklung vereinfacht. Die Programmiererin, die Code zum Erben schreibt, muss die Methodendefinitionen genau befolgen (kann aber natürlich ihre eigene Implementierung haben). In Java und C # werden abstrakte Klassen und Methoden mit dem Schlüsselwort Abstract deklariert. Dies ist eine gute Möglichkeit, einen Vertrag zwischen zwei Programmierern zu erstellen, was die Aufgaben in der Softwareentwicklung vereinfacht. Die Programmiererin, die Code zum Erben schreibt, muss die Methodendefinitionen genau befolgen (kann aber natürlich ihre eigene Implementierung haben). In Java und C # werden abstrakte Klassen und Methoden mit dem Schlüsselwort Abstract deklariert. Dies ist eine gute Möglichkeit, einen Vertrag zwischen zwei Programmierern zu erstellen, was die Aufgaben in der Softwareentwicklung vereinfacht. Die Programmiererin, die Code zum Erben schreibt, muss die Methodendefinitionen genau befolgen (kann aber natürlich ihre eigene Implementierung haben). In Java und C # werden abstrakte Klassen und Methoden mit dem Schlüsselwort Abstract deklariert.
Virtuell
Virtuelle Methoden / Funktionen bieten die Möglichkeit, ihr Verhalten optional durch eine erbende Klasse zu überschreiben (unter Verwendung einer Funktion mit derselben Signatur). Das Konzept der virtuellen Funktion ist im folgenden Szenario wichtig. Angenommen, eine Klasse wird von einer untergeordneten Klasse abgeleitet. Wenn ein Objekt der abgeleiteten Klasse verwendet wird, kann es sich auf ein Objekt der Basisklasse oder der abgeleiteten Klasse beziehen. Das Verhalten von Methodenaufrufen kann jedoch mehrdeutig sein, wenn die Basisklassenmethoden überschrieben werden. Um diese Mehrdeutigkeit zu beheben, wird das Schlüsselwort Virtual verwendet. Wenn die Methode als Virtuell markiert ist, wird die Funktion der abgeleiteten Klasse (falls vorhanden) oder die Funktion der Basisklasse aufgerufen. In C ++ wird beispielsweise das Schlüsselwort Virtual genau für diesen Zweck verwendet. In C # wird das virtuelle Schlüsselwort auf ähnliche Weise verwendet, jedoch zusätzlichDie Schlüsselwortüberschreibung sollte verwendet werden, um alle überschriebenen Methoden zu ändern. In Java gibt es jedoch kein explizites virtuelles Schlüsselwort. Alle nicht statischen Methoden werden als virtuell betrachtet. Virtuelle Funktionen ohne Körper werden als reine virtuelle Funktionen bezeichnet. In Java und C # sind abstrakte Methoden tatsächlich Pure Virtual.
Unterschied zwischen virtuell und abstrakt
Obwohl Abstract und Virtual zwei Schlüsselwörter / Konzepte sind, die den zugehörigen Entitäten die Bedeutung einer unvollständigen Implementierung verleihen, weisen sie doch Unterschiede auf. Abstrakte Methoden (die in abstrakten Klassen definiert werden müssen) haben überhaupt keine Implementierung, während virtuelle Methoden möglicherweise eine Implementierung haben. Wenn abstrakte Methoden um eine konkrete Klasse erweitert werden, müssen alle geerbten abstrakten Methoden implementiert werden, während geerbte virtuelle Methoden möglicherweise überschrieben werden oder nicht.