Unterschied zwischen virtuell und abstrakt

Anonim

Virtual vs Abstract

gibt, sind Virtual und Abstract zwei Schlüsselwörter in den meisten objektorientierten (OO) Programmiersprachen wie Java und C #. Obwohl es in verschiedenen Sprachen geringfügige Unterschiede gibt, bieten sowohl die Schlüsselwörter Virtual und Abstract einen Sinn für die teilweise Implementierung der Entitäten, an die es gebunden ist.

Zusammenfassung

Normalerweise können abstrakte Klassen, die auch als abstrakte Basisklassen (ABC) bezeichnet werden, nicht instanziiert werden (eine Instanz dieser Klasse kann nicht erstellt werden). Abstrakte Klassen sind daher nur sinnvoll, wenn die Programmiersprache die Vererbung unterstützt (Möglichkeit, Unterklassen beim Erweitern einer Klasse zu erstellen). Abstrakte Klassen stellen normalerweise ein abstraktes Konzept oder eine Entität mit teilweiser oder keiner Implementierung dar. Abstrakte Klassen fungieren daher 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 (vererbten) abstrakten Methoden implementieren. Wenn die untergeordnete Klasse alle derartigen abstrakten Methoden implementiert, ist dies eine konkrete Klasse. Wenn dies jedoch nicht der Fall ist, wird die untergeordnete Klasse ebenfalls zu einer abstrakten Klasse. Was das alles bedeutet, ist, dass wenn die Programmiererin eine Klasse als Abstract nominiert, sie sagt, dass die Klasse unvollständig sein wird und sie Elemente haben wird, 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. Der Programmierer, der Code zum Erben schreibt, muss genau den Methodendefinitionen folgen (aber natürlich eine eigene Implementierung haben). In Java und C # werden abstrakte Klassen und Methoden mit dem Abstrakt-Schlüsselwort deklariert.

Virtual

Virtuelle Methoden / Funktionen bieten die Möglichkeit, ihr Verhalten durch eine vererbende Klasse (mit einer Funktion mit derselben Signatur) zu überschreiben. 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 Methoden der Basisklasse überschrieben werden. Um diese Mehrdeutigkeit zu beheben, wird daher ein virtuelles Schlüsselwort verwendet. Wenn die Methode als virtuell markiert ist, wird die Funktion der abgeleiteten Klasse aufgerufen (falls vorhanden) oder die Funktion der Basisklasse aufgerufen. Beispielsweise wird in C ++ das virtuelle Schlüsselwort exakt für diesen Zweck verwendet. In C # wird das Schlüsselwort Virtual auf ähnliche Weise verwendet. Darüber hinaus sollte die Überschreibung des Schlüsselworts verwendet werden, um alle überschriebenen Methoden zu ändern.In Java gibt es jedoch kein explizites virtuelles Schlüsselwort. Alle nicht statischen Methoden gelten als virtuell. Virtuelle Funktionen ohne Körper werden als reine virtuelle Funktionen bezeichnet. In Java und C # sind abstrakte Methoden tatsächlich Pure Virtual.

Obwohl es sich bei Abstract und Virtual um zwei Schlüsselwörter / Begriffe handelt, die eine Bedeutung der unvollständigen Implementierung für die zugehörigen Entitäten liefern, haben sie ihre Unterschiede. Abstrakte Methoden (die in Abstrakt-Klassen definiert werden müssen) haben überhaupt keine Implementierung, während Virtuelle Methoden möglicherweise eine Implementierung haben. Wenn abstrakte Methoden durch eine konkrete Klasse erweitert werden, müssen alle geerbten abstrakten Methoden implementiert werden, während geerbte virtuelle Methoden möglicherweise überschrieben werden.