Unterschied zwischen Schnittstelle und abstrakter Klasse in Java & C #

Autor: Laura McKinney
Erstelldatum: 1 April 2021
Aktualisierungsdatum: 10 Kann 2024
Anonim
Unterschied zwischen Schnittstelle und abstrakter Klasse in Java & C # - Technologie
Unterschied zwischen Schnittstelle und abstrakter Klasse in Java & C # - Technologie

Inhalt


Interface- und Abstract-Klasse tragen beide zum "unvollständigen Typ" in OOP bei. Manchmal benötigen wir eine Superklasse, um zu definieren, was zu tun ist, aber nicht, wie zu tun ist, sondern wie ein Teil von der abgeleiteten Klasse gemäß ihren Anforderungen implementiert wird.SchnittstelleBieten eine Lösung dafür. Manchmal brauchen wir eine Superklasse, die eine verallgemeinerte Struktur definiert, die von abgeleiteten Klassen implementiert werden kann, und eine bestimmte Struktur, die von den abgeleiteten Klassen verwendet werden kann. “abstrakte Klasse”Bietet eine Lösung dafür. Der grundlegende Unterschied zwischen der Schnittstelle und der abstrakten Klasse besteht darin, dass die Schnittstelle vollständig unvollständig und die abstrakte Klasse teilweise unvollständig ist.

  1. Vergleichstabelle
  2. Definition
  3. Hauptunterschiede
  4. Fazit

Vergleichstabelle

Grundlage für den VergleichSchnittstelleAbstrakte Klasse
BasicWenn Sie nur die Anforderungen kennen, nicht aber die Implementierung, verwenden Sie "Interface".Wenn Sie teilweise über die Implementierungen Bescheid wissen, verwenden Sie "Abstrakte Klassen".
MethodenDie Schnittstelle enthält nur abstrakte Methoden.Die abstrakte Klasse enthält sowohl abstrakte als auch konkrete Methoden.
Zugriffsmodifikator für MethodenSchnittstellenmethoden sind immer "Public" und "Abstract", auch wenn wir nicht deklarieren. Daher kann es als 100% reine abstrakte Klasse bezeichnet werden.Es ist nicht obligatorisch, dass die Methode im abstrakten Unterricht öffentlich und abstrakt ist. Es kann auch konkrete Methoden geben.
Eingeschränkter Modifikator für MethodenEine Schnittstellenmethode kann nicht mit den folgenden Modifikatoren deklariert werden:
Öffentlich: Privat und geschützt
Abstract: final, statisch, synchronisiert, native, strictfp.
Es gibt keine Einschränkungen für die Modifikatoren der abstrakten Klassenvariablen.
Zugriffsmodifikator für VariablenDer für Schnittstellenvariablen zulässige Zugriffsmodifikator ist öffentlich, statisch und endgültig, unabhängig davon, ob wir dies deklarieren oder nicht.Die Variablen in der abstrakten Klasse müssen nicht öffentlich, statisch oder endgültig sein.
Eingeschränkte Modifikatoren für VariablenSchnittstellenvariablen können nicht als privat, geschützt, transient oder flüchtig deklariert werden.Es gibt keine Einschränkung für die Modifikatoren von abstrakten Klassenvariablen.
Initialisierung von VariablenDie Schnittstellenvariablen müssen zum Zeitpunkt ihrer Deklaration initialisiert werden.Es ist nicht obligatorisch, dass abstrakte Klassenvariablen zum Zeitpunkt ihrer Deklaration initialisiert werden müssen.
Instanz- und statische BlöckeInnerhalb der Schnittstelle können Sie keine Instanz oder keinen statischen Block deklarieren.In der abstrakten Klasse ist eine Instanz oder ein statischer Block zulässig.
KonstruktorenSie können den Konstruktor nicht innerhalb der Schnittstelle deklarieren.Sie können Konstruktor in einer abstrakten Klasse deklarieren.


Definition der Schnittstelle

Java lässt keine Mehrfachvererbung zu. Das heißt, eine einzelne Klasse kann nicht mehr als eine Klasse gleichzeitig erben. Der Grund dafür kann an einem Beispiel erläutert werden. Nehmen wir an, wir haben zwei Elternklassen, A und B, und eine abgeleitete Klasse C. Die abgeleitete Klasse C erbt beide Klassen A und B.Haben beide Klassen A und B die Methode set (), dann ist es für die Klasse C eine Frage, welche set () -Methode sie erben soll. Die Lösung für dieses Problem ist "Schnittstelle".

Interface ist eine reine abstrakte Klasse. Das Schlüsselwort zum Erstellen einer Schnittstelle lautet „interface“. Da alle Methoden in der Benutzeroberfläche vollständig abstrakt sind. Die Schnittstelle gibt nur an, was eine Klasse tun muss, definiert jedoch nicht, wie sie es tut. Nur weil alle in der Schnittstelle deklarierten Methoden abstrakt sind, wird für eine Schnittstelle keine Instanz erstellt. Die allgemeine Form von "Schnittstelle" in Java ist:


access_specifier Schnittstelle Schnittstellenname {Rückgabetyp Methodenname1 (Parameterliste); Rückgabetyp Methodenname2 (Parameterliste); Typ final-varname1 = Wert; Typ final-varname2 = Wert; // ... Rückgabetyp MethodennameN (Parameterliste); Typ final-varnameN = Wert; }

Der Zugriffsspezifizierer wird als öffentlich deklariert, da die Klassen die Schnittstelle implementieren müssen.

Wir haben nicht das Konzept der "Schnittstelle" in C ++. Java und C # definieren die Schnittstelle jedoch sehr gut.

Schnittstelle in Java:

  • Variablen einer Schnittstelle sind standardmäßig immer public, static und final.
  • Variablen müssen zum Zeitpunkt ihrer Deklaration initialisiert werden.
  • Variablen können niemals als privat, geschützt, vorübergehend und flüchtig deklariert werden.
  • Methoden einer Schnittstelle sind immer öffentlich und abstrakt, während sie niemals als privat, geschützt, endgültig, statisch, synchronisiert, nativ und streng definiert werden können.
  • Sie können keinen Konstruktor in der Schnittstelle deklarieren, da der Hauptzweck des Konstruktors in der Initialisierung von Klassenvariablen besteht. In der Schnittstelle werden Variablen jedoch zum Zeitpunkt der Deklaration initialisiert.
  • Interface kann andere Interfaces erben, aber die Klasse, die ein solches Interface implementiert, muss die Methoden aller geerbten Interfaces implementieren.
  • Eine Klasse kann mehrere Schnittstellen gleichzeitig erben und muss alle Methoden aller geerbten Schnittstellen implementieren.

Die allgemeine Form der Implementierung einer Schnittstelle in Java:

class class_name implementiert Interface_name {// class-body}

Zum Erben einer Schnittstelle verwendet eine Klasse ein Schlüsselwort "implements", und die Klasse implementiert alle von einer geerbten Schnittstelle deklarierten Methoden.

Schnittstelle in C #:

Die Benutzeroberfläche in C # ähnelt fast der in Java, mit folgenden Ausnahmen:

  • Schnittstelle in C # deklariert keine Variablen.
  • Dem Namen der Schnittstelle wird ein Großbuchstabe I vorangestellt, und ein Doppelpunkt (:) wird übernommen.

Die allgemeine Form der Implementierung einer Schnittstelle in C #:

class class_name: interface_name {// class-body}

Definition der abstrakten Klasse

Eine Klasse, die eine oder mehrere abstrakte Methoden enthält, heißt abstrakte Klasse, und eine Klasse wird mit dem Schlüsselwort „abstract“ als abstrakt deklariert, dem das Schlüsselwort „class“ am Anfang der Klassendeklaration vorangestellt ist. Da die abstrakte Klasse die abstrakte Methode enthält, handelt es sich um einen unvollständigen Typ. Daher können Sie keine Objekte einer abstrakten Klasse erstellen. Wenn eine Klasse eine abstrakte Klasse erbt, muss sie alle abstrakten Methoden der abstrakten Klasse implementieren, wenn dies nicht der Fall ist. Sie muss auch als abstrakt deklariert werden. Das abstract-Attribut wird vererbt, bis die vollständige Implementierung der abstrakten Methoden erreicht ist.

Die abstrakte Klasse kann auch konkrete Methoden enthalten, die von der abgeleiteten Klasse so wie sie ist verwendet werden können. Sie können jedoch keinen abstrakten Konstruktor oder eine abstrakte statische Methode innerhalb einer abstrakten Klasse deklarieren. Die allgemeine Form der abstrakten Klasse in Java lautet wie folgt:

abstrakte Klasse Klassenname {abstrakte Methodenname1 (); abstract method_name2 (); : Rückgabetyp Methodenname3 (Parameterliste) {// konkrete Methode} Rückgabetyp Methodenname4 (Parameterliste) {// konkrete Methode}};

Das Konzept einer abstrakten Klasse ist in Java und C # ähnlich. Eine abstrakte Klasse unterscheidet sich in C ++ geringfügig.

Wenn eine Klasse in C ++ mindestens eine virtuelle Funktion hat, wird die Klasse zu einer abstrakten Klasse. Anstelle des Schlüsselworts "abstract" wird das Schlüsselwort "virtual" verwendet, um eine abstrakte Methode zu deklarieren.

  1. Wenn Sie wissen, was erforderlich ist, aber nicht, wie es implementiert wird, muss die Schnittstelle verwendet werden. Wenn Sie andererseits wissen, was erforderlich ist und teilweise wissen, wie es implementiert werden würde, verwenden Sie eine abstrakte Klasse.
  2. Eine Schnittstelle hat alle ihre Methoden abstrakt, aber eine abstrakte Klasse hat einige abstrakte Methoden und einige konkrete Methoden.
  3. Die Methoden in einer Schnittstelle sind öffentlich und abstrakt, daher wird sie auch als reine abstrakte Klasse bezeichnet. Andererseits sind die Methoden in einem Abstract nicht nur öffentlich und abstrakt.
  4. Eine Schnittstellenmethode kann niemals privat, geschützt, endgültig, statisch, synchronisiert, nativ oder strictfp sein. Andererseits gibt es keine Einschränkungen für Methoden einer abstrakten Klasse.
  5. Die Variablen in einer Schnittstelle sind öffentlich und endgültig, unabhängig davon, ob wir sie deklarieren oder nicht. Es gibt jedoch keine solche Einschränkung, dass die Variablen einer abstrakten Klasse nur öffentlich und endgültig sind.
  6. Variablen in einer Schnittstelle können niemals vorübergehend oder flüchtig sein, wohingegen es keine Einschränkung für Variablen in einer abstrakten Klasse gibt.
  7. Die Variable einer Schnittstelle muss bei der Deklaration initialisiert werden. Andererseits können die Variablen in einer abstrakten Klasse jederzeit initialisiert werden.
  8. Innerhalb einer Schnittstelle kann eine Instanz oder ein statischer Block nicht deklariert werden. Sie können jedoch eine Instanz oder einen statischen Block innerhalb einer abstrakten Klasse deklarieren.
  9. Sie können keinen Konstruktor in einer Schnittstelle definieren, während Sie einen Konstruktor in einer abstrakten Klasse definieren können.

Fazit:

Wenn Sie eine Basisklasse erstellen müssen, die eine verallgemeinerte Form von Methoden enthält, die von den abgeleiteten Klassen je nach Bedarf implementiert werden können, hilft das Konzept der Schnittstelle und der abstrakten Klasse.