Eine abstrakte Klasse ähnelt einer Oberfläche, aber das Konzept ist für Anfänger von OOP etwas verwirrend. Konzeptionell sieht eine abstrakte Klasse wie eine Schnittstelle aus, natürlich ohne Implementierung, jedoch haben sie durchaus unterschiedliche Unterschiede. Während eine abstrakte Klasse teilweise oder vollständig implementiert werden kann, muss eine Schnittstelle vollständig implementiert werden. Nun, der bemerkenswerteste Unterschied zwischen den beiden ist, dass eine abstrakte Klasse eine Standardimplementierung haben kann, während ein Interface nur die Definition von Methoden ist, die nur die Memberdeklarationen enthält. Lassen Sie uns die theoretischen Aspekte von beiden ausführlich besprechen.
Eine abstrakte Klasse ist eine spezielle Klasse, die als Basis für andere Klassen dient und nicht instanziiert werden kann. Die Implementierungslogik einer abstrakten Klasse wird von ihren abgeleiteten Klassen bereitgestellt. Um eine Klasse abstrakt zu machen, wird der Modifikator "abstract" verwendet, was bedeutet, dass einige fehlende Implementierungen in der davon abgeleiteten Klasse implementiert werden müssen. Es enthält sowohl abstrakte als auch nicht abstrakte Mitglieder. Eine abstrakte Klasse soll grundlegende Funktionen bereitstellen, die von mehreren abgeleiteten Klassen gemeinsam genutzt und überschrieben werden können. Es ist nützlich, jegliche Art von Code-Duplizierung zu vermeiden. Sie sehen sehr nach Schnittstellen aus, haben jedoch zusätzliche Funktionen.
Eine Schnittstelle dagegen ist keine Klasse, die nur die Signatur der Funktionalität enthält. Es ist ein Muster ohne Implementierung. Konzeptionell ist es nur die Definition von Methoden, die nur die Deklaration von Mitgliedern enthält. Es ist eine leere Hülle, die die Implementierung ihrer Mitglieder nicht enthält. Es ist wie eine abstrakte Basisklasse, die nur abstrakte Elemente wie Methoden, Ereignisse, Indexer, Eigenschaften usw. enthält. Sie kann nicht direkt instanziiert werden und ihre Mitglieder können von jeder Klasse implementiert werden. Darüber hinaus können mehrere Schnittstellen von einer Klasse implementiert werden, eine Klasse kann jedoch nur eine einzelne Klasse erben.
Abstrakte Klasse | Schnittstelle |
Eine abstrakte Klasse kann alle Zugriffsmodifizierer für die Memberdeklaration von Funktionen, Subs und Eigenschaften haben. | Ein Interface darf keine Zugriffsmodifizierer für die Memberdeklaration von Funktionen, Subs, Properties usw. haben. Alle Member werden als implizit public angenommen. |
Eine Klasse kann höchstens eine abstrakte Klasse verwenden. | Eine Klasse kann eine beliebige Anzahl von Schnittstellen erben. |
Mehrfachvererbung wird in abstrakten Klassen nicht unterstützt. | Eine Schnittstelle kann Mehrfachvererbung unterstützen. |
Technisch handelt es sich dabei um eine Klasse, die sowohl Definition als auch Implementierung enthalten kann oder nicht. | Eine Schnittstelle kann nur die Signatur der Funktionalität haben, also im Grunde genommen eine leere Shell. |
Eine abstrakte Klasse kann Mitglieder enthalten. consts, definierte Methoden und Methodenstubs. | Eine Schnittstelle kann nur Methoden und Konstanten enthalten. |
Sie definiert die Kernidentität einer Klasse und wird verwendet, um Objekte des gleichen Datentyps zu beschreiben. | Es wird verwendet, um die peripheren Fähigkeiten einer Klasse zu beschreiben. |
Mitglieder einer abstrakten Klasse können nicht statisch sein, es sei denn, es handelt sich um ein vollständiges Mitglied. | Mitglieder einer Schnittstelle können nicht statisch sein. |
Es ist ideal für Implementierungen der gleichen Art und des gleichen Verhaltens. | Es ist besser, Schnittstellen zu verwenden, wenn mehrere Implementierungen nur Methodensignaturen verwenden. |
Es kann Konstruktordeklaration haben. | Es kann keine Konstruktordeklaration haben. |
Eine abstrakte Klasse hat vordefinierte Felder und Einengungen. | Felder können nicht in Schnittstellen definiert werden. |
Es kann sowohl abstrakte als auch nicht abstrakte Methoden geben. | Es kann nur abstrakte Methoden haben. |
Was ist der Unterschied zwischen einer abstrakten Klasse und einer Schnittstelle? Dies ist wahrscheinlich eine der häufigsten Fragen, die in einem technischen Interview gestellt werden. In jedem C # -Tutorial finden Sie wahrscheinlich eine Fülle von Informationen zu abstrakten Klassen und Schnittstellen. Das Verständnis des Unterschieds zwischen beiden ist jedoch ziemlich schwierig. Sie können alle Informationen konsolidieren, die Sie finden können und trotzdem nicht genug bekommen. Nun, konzeptionell sind beide die wichtigsten Begriffe in der Programmierung und sind ziemlich gleich, unterscheiden sich jedoch in der Funktionalität stark. Während eine abstrakte Klasse ein spezieller Klassentyp ist, der als Basis für andere Klassen dient, ist eine Schnittstelle dagegen nur eine leere Shell mit nur Memberdeklarationen.