Unterschied zwischen abstrakter Klasse und Schnittstelle

Anonim

Abstrakte Klasse und Schnittstelle

Abstrakte Klasse und Interface sind zwei objektorientierte Konstrukte, die in vielen objektorientierten Programmiersprachen wie Java zu finden sind. Die abstrakte Klasse kann als eine abstrakte Version einer regulären (konkreten) Klasse betrachtet werden, während eine Schnittstelle als ein Mittel zur Implementierung eines Vertrags betrachtet werden kann. Die abstrakte Klasse ist eine Klasse, die nicht initialisiert werden kann, sondern erweitert werden kann. Interface ist ein Typ, der von anderen Klassen implementiert werden muss. In Java werden abstrakte Klassen mit dem Schlüsselwort Abstract deklariert, während das Schlüsselwort interface verwendet wird, um eine Schnittstelle zu definieren.

Was ist eine abstrakte Klasse?

Normalerweise können abstrakte Klassen, auch als abstrakte Basisklassen (ABC) bekannt, nicht instanziiert werden (eine Instanz dieser Klasse kann nicht erstellt werden). Abstrakte Klassen sind daher nur sinnvoll, wenn die Programmiersprache die Vererbung unterstützt (Möglichkeit, Unterklassen beim Erweitern einer Klasse zu erstellen). Abstrakte Klassen stellen normalerweise ein abstraktes Konzept oder eine Entität mit teilweiser oder keiner Implementierung dar. Abstrakte Klassen fungieren daher als übergeordnete Klassen, von denen untergeordnete Klassen abgeleitet werden, sodass die untergeordnete Klasse die unvollständigen Merkmale der übergeordneten Klasse gemeinsam nutzt und Funktionen hinzugefügt werden können, um sie zu vervollständigen.

Abstrakte Klassen können Abstrakte Methoden enthalten. Unterklassen, die eine abstrakte Klasse erweitern, können diese (vererbten) abstrakten Methoden implementieren. Wenn die untergeordnete Klasse alle derartigen abstrakten Methoden implementiert, ist dies eine konkrete Klasse. Wenn dies jedoch nicht der Fall ist, wird die untergeordnete Klasse ebenfalls zu einer abstrakten Klasse. Was das alles bedeutet, ist, dass wenn die Programmiererin eine Klasse als Abstract nominiert, sie sagt, dass die Klasse unvollständig sein wird und sie Elemente haben wird, die von den ererbenden Unterklassen vervollständigt werden müssen. Dies ist eine gute Möglichkeit, einen Vertrag zwischen zwei Programmierern zu erstellen, was die Aufgaben in der Softwareentwicklung vereinfacht. Der Programmierer, der Code zum Erben schreibt, muss genau den Methodendefinitionen folgen (aber natürlich eine eigene Implementierung haben).

Was ist ein Interface?

Eine Schnittstelle ist ein abstrakter Typ, der verwendet wird, um einen Vertrag anzugeben, der von Klassen implementiert werden soll, die diese Schnittstelle implementieren. Das Schlüsselwort interface dient zum Definieren einer Schnittstelle und das Implements-Schlüsselwort wird zum Implementieren einer Schnittstelle durch eine Klasse (in Java-Programmiersprache) verwendet. Normalerweise enthält eine Schnittstelle nur Methodensignaturen und Konstantenerklärungen. Jede Schnittstelle, die eine bestimmte Schnittstelle implementiert, sollte alle in der Schnittstelle definierten Methoden implementieren oder als abstrakte Klasse deklariert werden. In Java kann der Typ einer Objektreferenz als Schnittstellentyp definiert werden. Dieses Objekt muss jedoch entweder null sein oder ein Objekt einer Klasse enthalten, das diese bestimmte Schnittstelle implementiert.Mit Implements-Schlüsselwort in Java können Sie mehrere Schnittstellen zu einer einzelnen Klasse implementieren.

Was ist der Unterschied zwischen Abstract Class und Interface?

Abstrakte Klassen stellen normalerweise ein abstraktes Konzept oder eine Entität mit partieller oder keiner Implementierung dar. Auf der anderen Seite ist eine Schnittstelle ein abstrakter Typ, der verwendet wird, um einen Vertrag anzugeben, der von Klassen implementiert werden soll. Abstrakte Klassen sollten vererbt (oder erweitert) werden, während Schnittstellen implementiert werden sollten. Abstrakte Klassen können abstrakte Methoden enthalten, während eine Schnittstelle nur abstrakte Methoden enthalten sollte. Abstrakte Klassen können beliebige Variablen enthalten, aber Interfaces können nur Konstanten definieren. Eine Klasse kann nicht von mehr als einer abstrakten Klasse erben, sondern kann mehrere Schnittstellen implementieren. Eine Schnittstelle kann keine andere Schnittstelle implementieren. Eine Schnittstelle kann jedoch eine Klasse erweitern.