Abstrakte Klasse gegen Schnittstelle
Abstrakte Klassen und Schnittstellen sind zwei objektorientierte Konstrukte, die in vielen objektorientierten Programmiersprachen wie Java zu finden sind. Eine abstrakte Klasse kann als abstrakte Version einer regulären (konkreten) Klasse betrachtet werden, während eine Schnittstelle als Mittel zur Implementierung eines Vertrags betrachtet werden kann. Abstrakte Klasse ist eine Klasse, die nicht initialisiert werden kann, aber erweitert werden kann. Interface ist ein Typ, der von anderen Klassen implementiert werden muss. In Java werden Abstract-Klassen mit dem Abstract-Schlüsselwort deklariert, während das Interface-Schlüsselwort zur Definition einer Schnittstelle verwendet wird.
Was ist eine abstrakte Klasse??
In der Regel können abstrakte Klassen (ABC - Abstract Base Classes) nicht instanziiert werden (eine Instanz dieser Klasse kann nicht erstellt werden). Abstrakte Klassen sind also nur dann von Bedeutung, wenn die Programmiersprache Vererbung unterstützt (Fähigkeit zum Erstellen von Unterklassen durch Erweitern einer Klasse). Abstrakte Klassen repräsentieren normalerweise ein abstraktes Konzept oder eine Entität mit teilweiser oder keiner Implementierung. Abstrakte Klassen fungieren daher als übergeordnete Klassen, von denen untergeordnete Klassen abgeleitet werden, sodass die untergeordneten Klassen die unvollständigen Features der übergeordneten Klasse gemeinsam nutzen und Funktionen hinzugefügt werden können, um sie abzuschließen.
Abstrakte Klassen können abstrakte Methoden enthalten. Unterklassen, die eine abstrakte Klasse erweitern, können diese (vererbten) Abstract-Methoden implementieren. Wenn die untergeordnete Klasse alle derartigen Abstract-Methoden implementiert, handelt es sich um eine konkrete Klasse. Wenn dies nicht der Fall ist, wird die untergeordnete Klasse auch zu einer abstrakten Klasse. Das bedeutet alles, wenn der Programmierer eine Klasse als Abstract nominiert, sagt sie, dass die Klasse unvollständig sein wird und Elemente enthalten werden, die von den erbenden Unterklassen vervollständigt werden müssen. Dies ist eine gute Möglichkeit, einen Vertrag zwischen zwei Programmierern zu erstellen, wodurch die Aufgaben bei der Softwareentwicklung vereinfacht werden. Der Programmierer, der Code schreibt, um zu erben, muss die Methodendefinitionen genau befolgen (natürlich kann sie auch eine eigene Implementierung haben)..
Was ist eine Schnittstelle??
Eine Schnittstelle ist ein abstrakter Typ, der verwendet wird, um einen Vertrag anzugeben, der von Klassen implementiert werden soll, die diese Schnittstelle implementieren. Das Schnittstellenschlüsselwort wird zum Definieren einer Schnittstelle verwendet, und das Implements-Schlüsselwort wird zum Implementieren einer Schnittstelle durch eine Klasse (in der Programmiersprache Java) verwendet. Normalerweise enthält eine Schnittstelle nur Methodensignaturen und Konstantendeklarationen. 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 sollte ein Objekt einer Klasse enthalten, die diese bestimmte Schnittstelle implementiert. Mit dem Schlüsselwort Implements in Java können Sie mehrere Schnittstellen in einer einzigen Klasse implementieren.
Was ist der Unterschied zwischen Abstract Class und Interface??
Abstrakte Klassen repräsentieren normalerweise ein abstraktes Konzept oder eine Entität mit teilweiser oder keiner Implementierung. Andererseits 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 ein Interface nur abstrakte Methoden enthalten sollte. Abstrakte Klassen können beliebige Variablen enthalten, Interfaces können jedoch nur Konstanten definieren. Eine Klasse kann nicht von mehr als einer abstrakten Klasse erben, kann jedoch mehrere Schnittstellen implementieren. Eine Schnittstelle kann keine andere Schnittstelle implementieren. Eine Schnittstelle kann jedoch eine Klasse erweitern.