Unterschied zwischen virtuellem und abstraktem

Virtuelles vs abstraktes

Virtuell und abstrakt sind zwei Schlüsselwörter, die in den meisten objektorientierten (OO) Programmiersprachen wie Java und C # verwendet werden. Obwohl es geringfügige Unterschiede in den verschiedenen Sprachen gibt, vermitteln sowohl die virtuellen als auch die abstrakten Schlüsselwörter die teilweise Implementierung der Entitäten, mit denen sie verbunden sind.

Abstrakt

In der Regel können abstrakte Klassen (ABC - Abstract Base Classes) nicht instanziiert werden (eine Instanz dieser Klasse kann nicht erstellt werden). Abstrakte Klassen sind also nur dann von Bedeutung, wenn die Programmiersprache Vererbung unterstützt (Fähigkeit zum Erstellen von Unterklassen durch Erweitern einer Klasse). Abstrakte Klassen repräsentieren normalerweise ein abstraktes Konzept oder eine Entität mit teilweiser oder keiner Implementierung. Abstrakte Klassen fungieren daher als übergeordnete Klassen, von denen untergeordnete Klassen abgeleitet werden, so dass die untergeordneten Klassen die unvollständigen Features der übergeordneten Klasse gemeinsam nutzen 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) Abstract-Methoden implementieren. Wenn die untergeordnete Klasse alle derartigen Abstract-Methoden implementiert, handelt es sich um eine konkrete Klasse. Wenn dies nicht der Fall ist, wird die untergeordnete Klasse auch zu einer abstrakten Klasse. Das bedeutet alles, wenn der Programmierer eine Klasse als Abstract nominiert, sagt sie, dass die Klasse unvollständig sein wird und Elemente enthalten werden, die von den erbenden Unterklassen vervollständigt werden müssen. Dies ist eine gute Möglichkeit, einen Vertrag zwischen zwei Programmierern zu erstellen, wodurch die Aufgaben bei der Softwareentwicklung vereinfacht werden. Der Programmierer, der Code schreibt, um zu erben, muss die Methodendefinitionen genau befolgen (aber er kann natürlich auch eine eigene Implementierung haben). In Java und C # werden Abstract-Klassen und -Methoden mit dem Schlüsselwort Abstract deklariert.

Virtuell

Virtuelle Methoden / Funktionen bieten die Möglichkeit, sein Verhalten optional durch eine erbende 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 des Methodenaufrufs kann jedoch mehrdeutig sein, wenn die Methoden der Basisklasse überschrieben werden. Um diese Mehrdeutigkeit aufzulösen, wird das virtuelle Schlüsselwort verwendet. Wenn die Methode als Virtual markiert ist, wird die Funktion der abgeleiteten Klasse (falls vorhanden) oder die Funktion der Basisklasse aufgerufen. In C ++ wird das virtuelle Schlüsselwort beispielsweise genau für diesen Zweck verwendet. In C # wird das virtuelle Schlüsselwort auf ähnliche Weise verwendet. Darüber hinaus sollte das Überschreiben 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 werden als virtuell betrachtet. Virtuelle Funktionen ohne Körper werden als reine virtuelle Funktionen bezeichnet. In Java und C # sind abstrakte Methoden tatsächlich rein virtuell.

Unterschied zwischen virtuellem und abstraktem

Obwohl abstrakt und virtuell zwei Schlüsselwörter / Konzepte sind, die den zugehörigen Entitäten eine Bedeutung der unvollständigen Implementierung bieten, haben sie doch Unterschiede. Abstrakte Methoden (die in abstrakten Klassen definiert werden müssen) haben überhaupt keine Implementierung, während virtuelle Methoden eine Implementierung haben können. Wenn Abstract-Methoden um eine konkrete Klasse erweitert werden, müssen alle vererbten Abstract-Methoden implementiert werden, während vererbte virtuelle Methoden möglicherweise überschrieben werden.