Unterschied zwischen abstrakter Klasse und Schnittstelle (mit Tabelle)

Unterschied zwischen abstrakter Klasse und Schnittstelle (mit Tabelle)

Wie wir alle wissen, bezieht sich Abstraktion auf die interne Implementierung der Funktion und darauf, den Benutzern lediglich die Praktikabilität zu zeigen. Das heißt, was es funktioniert (zeigt). Die Schnittstelle bietet jedoch eine vollständige Abstraktion in Java, was abstrakte Kategorien nicht leisten können.

Abstrakte Klasse vs. Schnittstelle

 Der Hauptunterschied zwischen abstrakter Klasse und Schnittstelle besteht darin, dass die assoziierte Schnittstelle lediglich eine andere Java-Schnittstelle erweitert; Die zugehörige abstrakte Kategorie wird eine weitere Java-Kategorie entwickeln und mehrere Java-Schnittstellen implementieren. Mitglieder einer Java-Schnittstelle sind standardmäßig öffentlich. Eine abstrakte Java-Kategorie verfügt über Kategoriemitglieder wie „persönlich“, „geschützt“ usw.

Unterschied zwischen abstrakter Klasse und Schnittstelle

Eine abstrakte Klasse ist eine Klasse, deren Deklaration das Schlüsselwort abstract enthält. In abstrakten Klassen sollte mindestens eine abstrakte Methode, also Methoden ohne Rumpf, vorhanden sein. Es kann verschiedene konkrete Methoden geben.

Sie können abstrakte Klassen verwenden, um Blaupausen für konkrete Klassen zu generieren. Die abstrakte Methode muss jedoch von der erbenden Klasse implementiert werden.

Die Schnittstelle ist eine Blaupause für eine Klasse, mit der sie erstellt werden kann. Die Schnittstelle verfügt über keine konkreten Methoden (Methoden, die Code haben). Die Methoden einer Schnittstelle sind allesamt abstrakte Methoden.

Es ist nicht möglich, eine Schnittstelle zu erstellen. Klassen, die Schnittstellen implementieren, können hingegen instanziiert werden. Instanzvariablen werden niemals in Schnittstellen verwendet. Es können jedoch öffentliche statische Endvariablen (auch als konstante Klassenvariablen bezeichnet) verwendet werden.

Was ist Abstraktklasse?

Eine abstrakte Klasse ist ein grundlegendes Konzept in der objektorientierten Programmierung (OOP), das als Blaupause oder Vorlage für andere Klassen dient. Es handelt sich um eine Klasse, die nicht instanziiert werden kann und von anderen Klassen erweitert oder in Unterklassen unterteilt werden soll. Abstrakte Klassen definieren gemeinsame Attribute und Methoden, die mehrere verwandte Klassen innerhalb einer Vererbungshierarchie gemeinsam nutzen.

Zu den wichtigsten Merkmalen und Merkmalen abstrakter Klassen gehören:

  1. Kann nicht instanziiert werden: Eine abstrakte Klasse kann nicht zum direkten Erstellen von Objekten oder Instanzen verwendet werden. Stattdessen bietet es ein Framework für Unterklassen, um seine Eigenschaften und Methoden zu erben und zu implementieren.
  2. Kann abstrakte Methoden enthalten: Abstrakte Klassen umfassen eine oder mehrere abstrakte Methoden. Methodendeklarationen ohne Implementierungsdetails. Unterklassen müssen konkrete Implementierungen für diese abstrakten Methoden bereitstellen.
  3. Kann konkrete Methoden umfassen: Abstrakte Klassen können auch konkrete (vollständig implementierte) Methoden haben, die Unterklassen erben können. Diese Methoden können gemeinsame Funktionen bereitstellen, die von allen Unterklassen gemeinsam genutzt werden.
  4. Wird für die Wiederverwendbarkeit von Code verwendet: Abstrakte Klassen fördern die Wiederverwendbarkeit von Code und das DRY-Prinzip (Don't Repeat Yourself), indem sie die Definition gemeinsamen Codes in einer einzigen abstrakten Klasse und die gemeinsame Nutzung durch verwandte Unterklassen ermöglichen.
  5. Erbe: Unterklassen erben die in einer abstrakten Klasse definierten Attribute und Methoden. Dies ermöglicht eine Spezialisierung und Anpassung des Verhaltens bei gleichzeitiger Beibehaltung einer gemeinsamen Struktur.
  6. Abstrakte vs. konkrete Klassen: Abstrakte Klassen werden von konkreten Klassen unterschieden, die direkt instanziiert werden können. Konkrete Klassen bieten vollständige Implementierungen für alle ihre Methoden.

In Sprachen wie Java und C# definiert das Schlüsselwort „abstract“ abstrakte Klassen. Abstrakte Klassen sind wertvolle Werkzeuge zum Aufbau von Hierarchien verwandter Klassen, die gemeinsame Merkmale und Verhaltensweisen aufweisen und gleichzeitig die Anpassung und Spezialisierung abgeleiteter Klassen ermöglichen.

Was ist Schnittstelle?

Eine Schnittstelle ist ein grundlegendes Konzept in der objektorientierten Programmierung (OOP), das einen Vertrag oder eine Reihe von Methodensignaturen definiert, die von jeder Klasse implementiert werden müssen, die sich an die Schnittstelle hält. Schnittstellen bieten eine Möglichkeit, Mehrfachvererbung in Sprachen zu erreichen, die diese nicht direkt unterstützen, und sie fördern Codeabstraktion, Modularität und Flexibilität.

Zu den wichtigsten Merkmalen und Merkmalen von Schnittstellen gehören:

  1. Methodensignaturen: Eine Schnittstelle definiert eine Sammlung von Methodensignaturen ohne Implementierungsdetails. Diese Methodensignaturen stellen eine Reihe von Verhaltensweisen dar, die implementierende Klassen bereitstellen müssen.
  2. Vertragspflicht: Wenn eine Klasse eine Schnittstelle implementiert, muss sie konkrete Implementierungen für alle in dieser Schnittstelle definierten Methoden bereitstellen. Andernfalls kommt es zu einem Kompilierungsfehler.
  3. Mehrfachvererbung: Im Gegensatz zu Klassen, die eine einzelne Vererbung (Erweitern einer Klasse) unterstützen, kann eine Klasse mehrere Schnittstellen implementieren. Dadurch kann eine Klasse mehrere Verhaltensweisen erben und bereitstellen.
  4. Abstraktion und Polymorphismus: Schnittstellen fördern die Abstraktion, indem sie das „Was“ (Methodensignaturen) vom „Wie“ (Methodenimplementierungen) trennen. Diese Abstraktion ermöglicht Polymorphismus, bei dem Objekte verschiedener Klassen, die dieselbe Schnittstelle implementieren, austauschbar behandelt werden können.
  5. Code-Wiederverwendbarkeit: Schnittstellen erleichtern die Wiederverwendbarkeit von Code, indem sie gemeinsame Verhaltensweisen definieren, die verschiedene Klassen implementieren können. Dies fördert das DRY-Prinzip (Don't Repeat Yourself).
  6. Flexibilität: Schnittstellen ermöglichen lose gekoppelten Code, indem sie ermöglichen, dass Klassen basierend auf den von ihnen implementierten Schnittstellen austauschbar sind. Diese Flexibilität ist besonders nützlich bei der Gestaltung modularer und erweiterbarer Systeme.

Schnittstellen werden in Sprachen wie Java, C# und TypeScript häufig verwendet, um Verträge zwischen Klassen zu definieren und durchzusetzen. Dadurch wird sichergestellt, dass sie einer bestimmten API (Application Programming Interface) entsprechen, gemeinsame Verhaltensweisen aufweisen und gleichzeitig unterschiedliche Implementierungen ermöglichen.

Vergleichstabelle zwischen abstrakter Klasse und Schnittstelle

 Parameter der DifferenzierungAbstrakte KlasseSchnittstelle
InstanziierungKann nicht direkt instanziiert werden.Es kann nicht direkt instanziiert werden.
ZweckDient als Blaupause für andere Klassen und kann sowohl Methodendeklarationen mit als auch ohne Implementierungen bereitstellen.Es kann nicht direkt instanziiert werden.
MethodenKann abstrakte (nicht implementierte) Methoden, konkrete (implementierte) Methoden oder eine Kombination aus beidem haben.Enthält nur Methodensignaturen ohne Implementierungen; Alle Methoden sind implizit abstrakt.
MehrfachvererbungUnterstützt Einzelvererbung; Eine Klasse kann nur eine abstrakte Klasse erweitern.Unterstützt Mehrfachvererbung; Eine Klasse kann mehrere Schnittstellen implementieren.
KonstruktorenKann Konstruktoren haben, die aufgerufen werden, wenn eine Instanz der Unterklasse erstellt wird.Es können keine Konstruktoren vorhanden sein, da diese nicht direkt instanziiert werden können.
Wiederverwendbarkeit des CodesFördert die Wiederverwendbarkeit von Code, indem gemeinsamer Code von verwandten Klassen gemeinsam genutzt werden kann.Fördert die Wiederverwendbarkeit von Code durch die Definition allgemeiner Verhaltensweisen, die Klassen implementieren müssen.
FlexibilitätBietet ein Gleichgewicht zwischen Abstraktion und Bereitstellung gemeinsamer Funktionalität.Betont die Abstraktion und die Spezifizierung eines Vertrags.
AnwendungsbeispieleNützlich zum Erstellen von Hierarchien verwandter Klassen mit gemeinsamem Verhalten und gemeinsamen Attributen.Nützlich zum Definieren von Verträgen, die sicherstellen, dass implementierende Klassen bestimmte Verhaltensweisen bereitstellen.
Beispielabstract class Shape { abstract double area(); }interface Drawable { void draw(); }
SzenarioNützlich, wenn Sie einer gemeinsamen Basisklasse ein gewisses Standardverhalten bereitstellen möchten, bestimmte Methoden jedoch von Unterklassen implementiert werden müssen.Nützlich, wenn Sie einen Vertrag oder einen gemeinsamen Satz von Verhaltensweisen für mehrere Klassen definieren möchten, ohne eine gemeinsame Basisklasse vorzugeben.

Hauptunterschiede zwischen Abstrakte Klasse und Schnittstelle

Abstrakte Klasse:

  • Kann sowohl abstrakte (nicht implementierte) als auch konkrete (implementierte) Methoden haben.
  • Unterstützt Einzelvererbung, d. h. eine Klasse kann nur eine abstrakte Klasse erweitern.
  • Kann Konstruktoren zum Initialisieren von Objektzuständen haben.
  • Ermöglicht die Erstellung einer Basisklasse mit Standardverhalten.
  • Bietet ein Gleichgewicht zwischen Abstraktion und allgemeiner Funktionalität.
  • Nützlich beim Erstellen von Hierarchien verwandter Klassen mit gemeinsamen Attributen und Verhaltensweisen.

Schnittstelle:

  • Enthält nur Methodensignaturen ohne Implementierungen; Alle Methoden sind implizit abstrakt.
  • Unterstützt Mehrfachvererbung, was bedeutet, dass eine Klasse mehrere Schnittstellen implementieren kann.
  • Es sind keine Konstruktoren möglich, da Schnittstellen nicht instanziiert werden können.
  • Definiert einen Vertrag, der eine Reihe von Methoden angibt, die implementierende Klassen bereitstellen müssen.
  • Betont die Abstraktion und die Spezifizierung einer gemeinsamen Reihe von Verhaltensweisen.
  • Nützlich zum Definieren von Verträgen und zum Sicherstellen, dass Klassen bestimmte API-Anforderungen einhalten.

Zusammenfassung

Mit einer abstrakten Klasse können Sie Funktionen erstellen, die von Unterklassen implementiert oder überschrieben werden können, während Sie mit einer Schnittstelle Funktionen angeben, aber nicht implementieren können. Während eine Klasse nur eine abstrakte Klasse erweitern kann, kann sie mehrere Interfaces implementieren.

Referenz

  1. https://dl.acm.org/doi/abs/10.1145/1040305.1040314
  2. https://books.google.com/books?hl=en&lr=&id=8M3F_sSSvWkC&oi=fnd&pg=PR13&dq=+interface+java&ots=Qo15NiH18i&sig=Y6OESYd5a6G709ynnLGB4Ry97yU
Punkt 1
Eine Bitte?

Ich habe mir so viel Mühe gegeben, diesen Blogbeitrag zu schreiben, um Ihnen einen Mehrwert zu bieten. Es wird sehr hilfreich für mich sein, wenn Sie es in den sozialen Medien oder mit Ihren Freunden / Ihrer Familie teilen möchten. TEILEN IST ♥️

Avatar von Nidhi

Über unsNidhi

Hallo! Ich bin Nidhi.

Hier bei der EHL dreht sich alles um köstliche, einfache Rezepte für ungezwungene Unterhaltung. Kommen Sie also zu mir an den Strand, entspannen Sie sich und genießen Sie das Essen.

Hinterlassen Sie uns einen Kommentar

E-Mail-Adresse wird nicht veröffentlicht. Pflichtfelder sind MIT * gekennzeichnet. *