Virtuell vs. Abstrakt
Virtual und Abstract sind zwei Schlüsselwörter, die in den meisten objektorientierten (OO) Programmiersprachen wie Java und C verwendet werden. Obwohl es geringfügige Unterschiede in der Bedeutung in verschiedenen Sprachen gibt, vermitteln sowohl die virtuellen als auch die abstrakten Schlüsselwörter ein Gefühl der teilweisen Implementierung der Entitäten, an die sie angehängt sind.
Zusammenfassung
Abstrakte Klassen, auch als abstrakte Basisklassen (ABC) bekannt, können normalerweise nicht instanziiert werden (eine Instanz dieser Klasse kann nicht erstellt werden). Abstrakte Klassen sind also nur sinnvoll, wenn die Programmiersprache Vererbung unterstützt (Fähigkeit, Unterklassen durch Erweitern einer Klasse zu erstellen). Abstrakte Klassen stellen normalerweise ein abstraktes Konzept oder eine Entität mit teilweiser oder keiner Implementierung dar. Daher fungieren abstrakte Klassen als übergeordnete Klassen, von denen untergeordnete Klassen abgeleitet werden, sodass die untergeordnete Klasse die unvollständigen Merkmale der übergeordneten Klasse teilt und Funktionalität hinzugefügt werden kann, um sie zu vervollständigen. Abstrakte Klassen können abstrakte Methoden enth alten. Unterklassen, die eine abstrakte Klasse erweitern, können diese (geerbten) abstrakten Methoden implementieren. Wenn die untergeordnete Klasse alle diese abstrakten Methoden implementiert, ist sie eine konkrete Klasse. Wenn dies jedoch nicht der Fall ist, wird die untergeordnete Klasse ebenfalls zu einer abstrakten Klasse. All dies bedeutet, dass der Programmierer, wenn er eine Klasse als Abstract nominiert, damit sagt, dass die Klasse unvollständig ist und Elemente enthält, die von den erbenden Unterklassen vervollständigt werden müssen. Dies ist eine schöne Möglichkeit, einen Vertrag zwischen zwei Programmierern zu erstellen, was Aufgaben in der Softwareentwicklung vereinfacht. Der Programmierer, der zu erbenden Code schreibt, muss sich genau an die Methodendefinitionen h alten (kann aber natürlich seine 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 Verh alten 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, dann kann sich jedes Mal, wenn ein Objekt der abgeleiteten Klasse verwendet wird, auf ein Objekt der Basisklasse oder der abgeleiteten Klasse beziehen. Das Verh alten von Methodenaufrufen kann jedoch mehrdeutig sein, wenn die Methoden der Basisklasse überschrieben werden. Um diese Mehrdeutigkeit aufzulösen, wird das Schlüsselwort Virtual verwendet. Wenn die Methode als Virtuell gekennzeichnet ist, wird die Funktion der abgeleiteten Klasse (falls vorhanden) oder die Funktion der Basisklasse aufgerufen. Beispielsweise wird in C++ das Schlüsselwort Virtual genau für diesen Zweck verwendet. In C wird das Schlüsselwort Virtual auf ähnliche Weise verwendet, aber zusätzlich sollte das Schlüsselwort override verwendet werden, um alle überschriebenen Methoden zu ändern. Aber in Java gibt es kein explizites Virtual-Schlüsselwort. Alle nicht statischen Methoden werden als virtuell betrachtet. Virtuelle Funktionen ohne Körper werden als rein virtuelle Funktionen bezeichnet. In Java und C sind abstrakte Methoden tatsächlich rein virtuell.
Unterschied zwischen virtuell und abstrakt
Obwohl „Abstract“und „Virtual“zwei Schlüsselwörter/Konzepte sind, die den zugehörigen Entitäten eine Bedeutung für eine unvollständige Implementierung geben, haben sie doch ihre Unterschiede. Abstrakte Methoden (die innerhalb abstrakter Klassen definiert werden müssen) haben überhaupt keine Implementierung, während virtuelle Methoden eine Implementierung haben können. Wenn abstrakte Methoden um eine konkrete Klasse erweitert werden, müssen alle geerbten abstrakten Methoden implementiert werden, während geerbte virtuelle Methoden überschrieben werden können oder nicht.