Abstrakte Klasse vs. Schnittstelle: Die Unterschiede und die Ähnlichkeiten

Veröffentlicht: 2021-06-02

Wenn Sie für ein Software-Engineering-Interview sitzen, ist die einzige Frage, die Sie erwarten können, die – die Unterschiede und Ähnlichkeiten zwischen Abstract Class und Interface.

Abstrakte Klassen und Schnittstellen sind die grundlegenden Blöcke in der objektorientierten Programmierung. Beide ermöglichen es Programmierern, eines der wesentlichsten Konzepte von OOPs zu implementieren – Abstraktion. Obwohl sowohl abstrakte Klassen als auch Schnittstellen verwendet werden, um das Konzept der Abstraktion zu implementieren, unterscheiden sich die beiden in der Implementierung und haben unterschiedliche Anwendungsfälle. Abstrakte Klassen und Schnittstellen mögen einem Anfänger ähnlich erscheinen, aber sie können nicht austauschbar verwendet werden.

In diesem Artikel betrachten wir die Nuancen von abstrakten Klassen, Schnittstellen und die Ähnlichkeiten und Unterschiede zwischen den beiden. Denken Sie daran, dass Abstract Class and Interface nur ein Konzept ist und in jeder objektorientierten Programmiersprache Ihrer Wahl implementiert werden kann. Aus Konsistenzgründen wird jede Syntax, die wir in diesem Artikel verwenden, um Ihnen die Konzepte zu erklären, von Java sein.

Am Ende dieses Artikels können Sie klar zwischen abstrakten Klassen und Schnittstellen unterscheiden und welche für bestimmte Fälle zu implementieren sind.

Inhaltsverzeichnis

Schnittstellen – Was ist das?

Eine Schnittstelle in OOPs kann einfach als Verhaltensvertrag zwischen verschiedenen Systemen verstanden werden. Das bedeutet, dass jede Klasse, die eine Schnittstelle implementiert, eine Implementierung für alle Methoden der Schnittstelle bereitstellen muss.

Alle Methoden in einer Schnittstelle müssen öffentlich und abstrakt sein. Schnittstellen werden daher auch als „rein abstrakte“ Klassen verstanden.

Die Definition von Schnittstellen sieht wie folgt aus:

öffentliche Schnittstelle Essen{

public void kauen ();

öffentliche Leere verdauen ();

}

Wie Sie sehen können, beinhaltet die Definition, dass dem Namen das Schlüsselwort interface vorangestellt wird . Außerdem wurden unter dieser Schnittstelle zwei abstrakte öffentliche Methoden definiert – die Klasse, die die obige Schnittstelle implementiert, muss also die Implementierung für chewing() und digesting() bereitstellen; Funktionen.

Schauen wir uns nun an, was abstrakte Klassen sind, und bringen dann beide Konzepte zusammen, damit Sie ihre Ähnlichkeiten und Unterschiede besser verstehen.

Abstrakte Klassen – Was ist das?

Das Schlüsselwort abstract wird in seiner Deklaration immer einer abstrakten Klasse vorangestellt. Darüber hinaus fungieren abstrakte Klassen als Richtlinien, die für ihre abgeleiteten nicht abstrakten Klassen erstellt wurden. In diesem Sinne müssen sie mindestens eine abstrakte Methode in ihrer Deklaration haben und gleichzeitig die richtige Implementierung für ihre nicht abstrakten Methoden bereitstellen.

So sieht die Definition von abstrakten Klassen aus:

öffentliche abstrakte Klasse Essen{

public void getReady(){

System.out.println(“Ich bin fertig zum Essen”);

}

öffentlicher abstrakter void start();

öffentlicher abstrakter void stop();

}

Wie Sie in der Definition der abstrakten Klasse sehen können, ist die Funktion getReady() nicht abstrakt, während die Funktion start(); und stop(); Funktionen sind abstrakt.

Bei der Implementierung abstrakter Klassen gibt es einige Regeln, die Sie beachten sollten:

  • Abstrakte Klassen können nicht instanziiert werden. Das heißt – wir können keine Objekte aus irgendwelchen abstrakten Klassen erstellen.
  • Jede untergeordnete Klasse, die die abstrakte Klasse erweitert, muss alle in der abstrakten Klasse beschriebenen abstrakten Methoden implementieren. Wenn die untergeordnete Klasse nicht alle abstrakten Methoden implementiert, sollte die untergeordnete Klasse ebenfalls als abstrakte Klasse deklariert werden.

Nachdem wir nun die Grundlagen von Schnittstellen und abstrakten Klassen kennen, wollen wir darüber sprechen, wie sie sich unterscheiden, was sie gemeinsam haben und wann wir welchen Ansatz verwenden sollten.

Unterschiede und Ähnlichkeiten zwischen Schnittstellen und abstrakten Klassen

Alle innerhalb einer Schnittstelle deklarierten Methoden sind implizit öffentlich und abstrakt – wohingegen abstrakte Klassen alle Arten von Modifikatoren für ihre Methoden haben können – von partiell, öffentlich, statisch, geschützt und mehr.

Darüber hinaus kann jede benutzerdefinierte Klasse mehr als eine Schnittstelle implementieren. Sie können jedoch nur eine abstrakte Klasse implementieren. Sowohl Schnittstellen als auch abstrakte Klassen können Methoden und Variablen haben, aber keine von ihnen kann instanziiert werden. Alle innerhalb der Schnittstelle deklarierten Variablen sind endgültig. Die in abstrakten Klassen deklarierten Variablen können jedoch nicht endgültig sein und können von den benutzerdefinierten Klassen geändert werden.

Hier ist eine Zusammenfassung aller Hauptunterschiede zwischen einer abstrakten Klasse und einer Schnittstelle.

Parameter Abstrakte Klassen Schnittstellen
Stichwort abstraktes Schlüsselwort wird verwendet. Interface- Schlüsselwort wird verwendet.
Art der Variablen Kann mit finalen, nicht-finalen, statischen und nicht-statischen Variablen umgehen. Es können standardmäßig nur statische und finale Variablen definiert werden.
Letzte Variablen Darin können final-Variablen deklariert sein oder auch nicht. Variablen werden standardmäßig als final deklariert
Zugriffsmodifikatoren Kann alle Modifikatoren haben – privat, öffentlich, statisch usw. Kann nur den öffentlichen Zugriffsmodifikator haben.
Arten von Methoden Kann sowohl abstrakte als auch nicht abstrakte Methoden haben. Kann nur abstrakte Methoden haben.
Geschwindigkeit Schnell Langsam, da zusätzliche Indirektion erforderlich ist.

Abstrakte Klasse vs. Schnittstelle: Wann sollte man sich für welche entscheiden?

Wenn Sie eine Basisklasse benötigen, um einige Implementierungen in Ihrem Code bereitzustellen, ist eine abstrakte Klasse der richtige Weg. Beispielsweise möchten Sie möglicherweise einige Variablen innerhalb einer Klasse initialisieren, um eine logische Aktion in einer Methode auszuführen, die alle abgeleiteten Klassen verwenden können. In einem solchen Szenario ist die Verwendung einer abstrakten Klasse die beste Wahl.

Wenn Sie Ihren Klassen jedoch Add-on-Verhalten bereitstellen müssen, sollten Sie sich für Schnittstellen entscheiden. In Wirklichkeit bieten Ihnen sowohl Schnittstellen als auch abstrakte Klassen die gleiche Funktionalität. Der Unterschied zeigt sich jedoch, wenn Sie Codierungsstandards berücksichtigen. Schnittstellen helfen Ihnen, Abstraktion und Polymorphie zu erreichen – zwei wichtige Prinzipien von OOPs. Es ermöglicht Ihnen auch, den Code locker gekoppelt statt fest gekoppelt zu halten.

Fassen wir nun die Anwendungsfälle von Schnittstellen und abstrakten Klassen zusammen!

Wann sollten Schnittstellen verwendet werden?

Ein Interface ermöglicht es Programmierern, zusätzliche Verhaltensmuster für ihre Klassen zu erstellen. Es erlaubt jemandem, bei Null anzufangen und die Schnittstelle in jeder gewünschten Klasse zu implementieren. Der Zweck der Schnittstelle ist daher nebensächlich – etwas, das dem Code hinzugefügt werden muss. In Fällen, in denen Sie also zusätzliche Funktionalitäten für Klassen bereitstellen möchten und es Ihnen nichts ausmacht, die Methoden Ihrer Schnittstelle offenzulegen (da alle Methoden öffentlich sind), sollten Sie mit einer Schnittstellenimplementierung fortfahren.

Wann verwendet man abstrakte Klassen?

Im Gegensatz zu Schnittstellen bieten abstrakte Klassen viel mehr Struktur. Abstrakte Klassen werden mit Standardimplementierungen einiger Methoden geliefert und bieten sogar nützliche Werkzeuge für die vollständige Implementierung der abstrakten Klasse. Sie sollten abstrakte Klassen verwenden, um einige gemeinsame Funktionen für eine Reihe verwandter Klassen bereitzustellen und gleichzeitig genügend Platz für Standardmethodenimplementierungen zu lassen.

Lernen Sie Softwareentwicklungskurse online von den besten Universitäten der Welt. Verdienen Sie Executive PG-Programme, Advanced Certificate-Programme oder Master-Programme, um Ihre Karriere zu beschleunigen.

Abschließend

Abstraktion ist eine entscheidende Komponente von OOPs, und sowohl abstrakte Klassen als auch Schnittstellen ermöglichen es Ihnen, einen gewissen Grad an Abstraktion in Ihrem Code zu erreichen. Sie jedoch austauschbar zu verwenden, ohne die Vor- und Nachteile zu kennen, ist ein Fehler und kann dazu führen, dass Ihr Code (und schließlich Ihre Software) fehlerhaft und verzögert ist.

Wir hoffen, dass dieser Artikel Ihnen geholfen hat, die entscheidenden Unterschiede zwischen abstrakten Klassen und Schnittstellen zu verstehen, zusammen mit etwas syntaktischem Wissen und wo sie implementiert werden.

Wenn Sie mehr über abstrakte Klassen und Schnittstellen erfahren möchten, schauen Sie sich das Executive PG-Programm in Full-Stack-Softwareentwicklung von upGrad & IIIT-B an, das für Berufstätige konzipiert ist und mehr als 500 Stunden strenges Training, mehr als 9 Projekte und Aufgaben bietet , IIIT-B-Alumni-Status, praktische praktische Abschlussprojekte und Arbeitsunterstützung bei Top-Unternehmen.

Wenn Sie immer noch verwirrt über die Nuancen sind, hinterlassen Sie uns bitte unten einen Kommentar, und wir werden uns bald bei Ihnen melden!

Was ist eine abstrakte Klasse in Java?

Die abstrakte Klasse ist eine Klasse, die nicht instanziiert und nicht vererbt werden kann. Sie hat selbst keine signifikanten Operationen und fungiert nur als Oberklasse für konkrete Klassen. Es dient nur der Spezialisierung. Betrachten Sie das Beispiel der Autoklasse und ihrer Unterklassen Sportwagen und Fließheck. Die abstrakte Klasse Auto kann als Elternklasse für alle Unterklassen betrachtet werden.

Wann verwendet man eine abstrakte Klasse in Java?

Der Hauptzweck der abstrakten Klasse besteht darin, die Basisklasse für eine Gruppe ähnlicher Klassen bereitzustellen. Alle Klassen, die eine abstrakte Klasse erweitern, müssen die in ihrer abstrakten Klasse definierten Methoden implementieren. Abstrakte Klassen werden hauptsächlich verwendet, um eine bestimmte Schnittstelle zu definieren, die die Klasse implementieren soll. Die abstrakte Klasse kann als Superklasse verwendet werden, in der wir Methoden definieren können, und erforderliche Methoden können in der untergeordneten Klasse implementiert und von der untergeordneten Klasse geerbt werden. Mit der abstrakten Klasse können wir den gemeinsamen Code definieren, der von der untergeordneten Klasse verwendet werden kann, was sie effizienter macht.

Was sind die Unterschiede zwischen einer abstrakten Klasse und einer Schnittstelle in Java?

Abstrakte Klasse und Schnittstelle sind die beiden Möglichkeiten, eine Klasse zu definieren, die einige, aber nicht alle Methoden enthalten, die die Klasse implementieren soll. Diese beiden sind statisch unterschiedlich und werden unterschiedlich erreicht. Aber in Bezug auf die dynamische Verwendung sind sie gleich. Eine Schnittstelle ist nur eine Klasse, die nur Konstanten und abstrakte Methodendeklarationen enthält. Es gibt keine eigentliche Implementierung der Schnittstelle in Java. Schnittstellen sind also vollständig Dummy-Klassen. Schnittstellen werden verwendet, um die Verträge von Methoden und Konstanten in der Klasse zu definieren. Es zwingt die Klasse, dieselben Methoden und Konstanten zu implementieren. Die Methode kann entweder in einer abstrakten Klasse oder in Unterklassen implementiert werden. Abstrakte Klasse ist eine Klasse, die abstrakte Methoden enthält. Unterklassen implementieren diese abstrakten Methoden. Abstrakte Klasse und Schnittstelle können zusammen verwendet werden, um bestimmte Verträge in der Klasse durchzusetzen.