Unterschied zwischen virtuell und abstrakt

Unterschied zwischen virtuell und abstrakt

Virtual vs Abstract

Virtuelle und Abstract sind zwei Schlüsselwörter, die in den meisten objektorientierten Programmiersprachen wie Java und C# verwendet werden. Obwohl es in verschiedenen Sprachen geringfügige Unterschiede in dem, was es bedeutet.

Abstrakt

Typischerweise können abstrakte Klassen, auch als abstrakte Basisklassen (ABC) bekannt, nicht instanziiert werden (eine Instanz dieser Klasse kann nicht erstellt werden). Abstrakte Klassen sind also nur sinnvoll, wenn die Programmiersprache die Vererbung unterstützt (Fähigkeit, Unterklassen aus der Erweiterung einer Klasse zu erstellen). Abstrakte Klassen repräsentieren normalerweise ein abstraktes Konzept oder eine Entität mit partieller oder nicht implementierter Implementierung. Daher fungieren abstrakte Klassen als übergeordnete Klassen, aus denen Kinderklassen abgeleitet sind. Abstrakte Klassen können abstrakte Methoden enthalten. Unterklassen, die eine abstrakte Klasse erweitern, können diese (ererbten) abstrakten Methoden implementieren. Wenn die untergeordnete Klasse alle solchen abstrakten Methoden implementiert, handelt es sich um eine konkrete Klasse. Aber wenn dies nicht der Fall ist, wird die Kinderklasse auch zu einer abstrakten Klasse. All dies bedeutet, dass die Klasse, wenn der Programmierer eine Klasse als Zusammenfassung nennt, unvollständig sein wird und Elemente haben, die durch die Erben -Unterklassen abgeschlossen werden müssen. Dies ist eine gute Möglichkeit, einen Vertrag zwischen zwei Programmierern zu erstellen, der Aufgaben in der Softwareentwicklung vereinfacht. Der Programmierer, der Code zum Erben schreibt, muss genau den Methodendefinitionen folgen (kann natürlich ihre eigene Implementierung haben). In Java und C#werden abstrakte Klassen und Methoden mit dem abstrakten Schlüsselwort deklariert.

Virtuell

Virtuelle Methoden/Funktionen bieten die Möglichkeit, ihr Verhalten optional durch eine Erbenklasse 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 sie sich auf ein Objekt der Basisklasse oder der abgeleiteten Klasse beziehen. Das Verhalten von Methodenaufruf kann jedoch mehrdeutig sein, wenn die Basisklassenmethoden überschrieben sind. Um diese Mehrdeutigkeit zu beheben, wird das virtuelle Schlüsselwort verwendet. Wenn die Methode virtuell gekennzeichnet ist, wird die Funktion der abgeleiteten Klasse aufgerufen (falls vorhanden) oder die Funktion der Basisklasse wird aufgerufen. Zum Beispiel wird in C ++ genau für diesen Zweck das virtuelle Schlüsselwort genau verwendet. In C#wird das virtuelle Schlüsselwort auf ähnliche Weise verwendet. Darüber hinaus sollte das Schlüsselwort -Überschreiben verwendet werden, um alle überschriebenen Methoden zu ändern. Aber in Java gibt es kein explizites virtuelles Keyword. Alle nicht statischen Methoden werden als virtuell angesehen. Virtuelle Funktionen ohne Körper werden als reine virtuelle Funktionen bezeichnet. In Java und C#sind abstrakte Methoden in der Tat rein virtuell.

Unterschied zwischen virtuell und abstrakt

Obwohl abstrakt und virtuell zwei Schlüsselwörter/Konzepte sind, die ihren zugehörigen Unternehmen eine Bedeutung einer unvollständigen Implementierung bieten, haben sie ihre Unterschiede. Abstrakte Methoden (die in abstrakten Klassen definiert werden müssen) haben überhaupt keine Implementierung, während virtuelle Methoden möglicherweise eine Implementierung haben können. Wenn abstrakte Methoden durch eine konkrete Klasse erweitert werden, müssen alle ererbten abstrakten Methoden implementiert werden, während ererbte virtuelle Methoden möglicherweise überschrieben werden oder nicht.