Klasse und Schnittstelle werden beide verwendet, um neue Referenztypen zu erstellen. Eine Klasse ist eine Sammlung von Feldern und Methoden, die auf Felder wirken. Eine Schnittstelle hat völlig abstrakte Methoden, d.h. Methoden mit niemandem. Eine Schnittstelle ist syntaktisch der Klasse ähnlich, aber es gibt einen großen Unterschied zwischen Klasse und Schnittstelle, nämlich dass eine Klasse instanziiert werden kann, aber eine Schnittstelle niemals instanziiert werden kann.
Lernen wir also einige weitere Unterschiede zwischen einer Klasse und einer Schnittstelle mit Hilfe eines unten gezeigten Vergleichsdiagramms.
Inhalt: Klasse vs. Schnittstelle
- Vergleichsdiagramm
- Definition
- Schlüsselunterschiede
- Abschluss
Vergleichsdiagramm
Vergleichsgrundlage | Klasse | Schnittstelle |
---|---|---|
Basic | Eine Klasse wird instanziiert, um Objekte zu erzeugen. | Eine Schnittstelle kann nie instanziiert werden, da die Methoden beim Aufruf keine Aktion ausführen können. |
Schlüsselwort | Klasse | Schnittstelle |
Zugriffsspezifikation | Die Mitglieder einer Klasse können privat, öffentlich oder geschützt sein. | Die Mitglieder einer Schnittstelle sind immer öffentlich. |
Methoden | Die Methoden einer Klasse sind definiert, um eine bestimmte Aktion auszuführen. | Die Methoden einer Schnittstelle sind rein abstrakt. |
Implementieren/Erweitern | Eine Klasse kann beliebig viele Schnittstellen implementieren und nur eine Klasse erweitern. | Eine Schnittstelle kann mehrere Schnittstellen erweitern, aber keine Schnittstelle implementieren. |
Konstruktor | Eine Klasse kann Konstruktoren haben, um die Variablen zu initialisieren. | Eine Schnittstelle kann niemals einen Konstruktor haben, da es kaum eine Variable gibt, die initialisiert werden muss. |
Definition der Klasse
Eine Klasse ist ein wichtiger Aspekt der Java-Programmierung ohne Klassen kann man kein Java-Programm implementieren. Eine Klasse erzeugt Referenztypen und diese Referenztypen werden verwendet, um Objekte zu erzeugen. Eine Klasse hat eine Signatur und einen Körper. Die Signatur einer Klasse enthält den Namen der Klasse und Informationen darüber, ob die Klasse eine andere Klasse geerbt hat. Der Körper einer Klasse enthält Felder und Methoden, die mit diesen Feldern arbeiten. Eine Klasse wird mit dem Schlüsselwort class erstellt. Schauen wir uns an, wie man eine Klasse deklariert.
class class_name{/*fields...methods*/}
Wenn eine Klasse instanziiert wird, enthält jedes erzeugte Objekt eine Kopie der Felder und Methoden mit ihnen. Die innerhalb einer Klasse deklarierten Felder und Mitglieder können statisch oder nicht statisch sein. Der Wert der statischen Mitglieder ist für jedes Objekt konstant, während die nicht statischen Mitglieder von jedem Objekt je nach Bedarf unterschiedlich initialisiert werden.
Mitglieder einer Klasse haben Zugriffsspezifizierer, die über die Sichtbarkeit und Zugänglichkeit der Mitglieder für den Benutzer oder für die Unterklassen entscheiden. Die Zugriffsspezifizierer sind public, private und protected. Eine Klasse kann von einer anderen Klasse geerbt werden, wobei der Zugriffsspezifizierer über die Sichtbarkeit der Mitglieder einer Oberklasse (geerbte Klasse) in einer Unterklasse (erbende Klasse) entscheidet. Somit erfüllt eine Klasse das Konzept des Data Hiding und der Kapselung in der objektorientierten Programmierung.
Definition der Schnittstelle
Eine Schnittstelle gehört ebenfalls zu den in Java definierten Referenztypen. Die Bedeutung einer Schnittstelle liegt darin, dass in Java eine Klasse nur eine einzige Klasse erben kann. Um diese Einschränkung zu umgehen, haben die Entwickler von Java das Konzept der Schnittstelle eingeführt. Eine Schnittstelle ähnelt syntaktisch einer Klasse, hat aber keine Felddeklaration und die Methoden innerhalb einer Schnittstelle haben keine Implementierung. Eine Schnittstelle wird mit dem Schlüsselwort interface deklariert. Schauen wir uns die Deklaration einer Schnittstelle an.
interface interface_name {type var_name= value;type method1(parameter-list);type method2(parameter-list);..}
Eine Schnittstelle definiert keine Methode, die in ihr deklariert ist, weil es ihr an Feldern fehlt, mit denen sie arbeiten kann. Nur weil eine Methode innerhalb einer Schnittstelle keine Aktion ausführt, kann eine Schnittstelle niemals instanziiert werden. Wenn eine Schnittstelle ein Feldmitglied hat, muss es zum Zeitpunkt der Deklaration initialisiert werden. Eine Schnittstelle enthält keine Konstruktoren, da es ihr an Feldmitgliedern fehlt, um initialisiert zu werden. Eine Schnittstelle definiert also nur, was eine Klasse tun muss, nicht wie sie es tun muss.
Eine einmal erstellte Schnittstelle kann von einer beliebigen Anzahl von Klassen mit dem Schlüsselwort implements implementiert werden. Aber die Klassen, die eine Schnittstelle implementieren, müssen alle Methoden innerhalb einer Schnittstelle definieren. Eine Schnittstelle kann auch eine andere Schnittstelle mit dem Schlüsselwort extend erben. Wenn eine Klasse eine Schnittstelle implementiert, die eine andere Schnittstelle erweitert. Dann muss eine Klasse die Methoden der beiden Schnittstellen definieren, die in einer Kette vorkommen. Die Methoden innerhalb einer Schnittstelle müssen immer öffentlich sein, da die Klassen, die sie implementieren, auf sie zugreifen müssen.
Schlüsselunterschiede zwischen Klasse und Schnittstelle in Java
- Eine Klasse kann instanziiert werden, indem ihre Objekte erstellt werden. Eine Schnittstelle wird nie instanziiert, da die Methoden, die innerhalb einer Schnittstelle deklariert werden, abstrakt sind und keine Aktion ausführen, so dass es keinen Grund gibt, eine Schnittstelle zu instanziieren.
- Eine Klasse wird mit dem Schlüsselwort class deklariert. Auf die gleiche Weise wird eine Schnittstelle mit dem Schlüsselwort interface erstellt.
- Die Mitglieder einer Klasse können den Zugriffsspezifizierer wie public, private, protected haben. Aber die Mitglieder einer Schnittstelle sind immer öffentlich, da die sie implementierenden Klassen auf sie zugreifen müssen.
- Die Methoden innerhalb einer Klasse werden definiert, um eine Aktion auf den in der Klasse deklarierten Feldern durchzuführen. Da die Schnittstelle keine Felder deklariert, sind die Methoden innerhalb einer Schnittstelle rein abstrakt.
- Eine Klasse kann eine beliebige Anzahl von Schnittstellen implementieren, aber nur eine Superklasse erweitern. Eine Schnittstelle kann eine beliebige Anzahl von Schnittstellen erweitern, kann aber keine Schnittstelle implementieren.
- Eine Klasse hat Konstruktoren, die in ihr definiert sind, um die Variablen zu initialisieren. Aber eine Schnittstelle hat keine Konstruktoren, da es keine Felder gibt, die initialisiert werden müssen. Die Felder einer Schnittstelle werden nur zum Zeitpunkt ihrer Deklaration initialisiert.
Abschluss
Beide, Klassen und Schnittstellen, haben ihre eigene Bedeutung. Eine Klasse wird verwendet, wenn wir definieren müssen, wie eine Aufgabe erledigt werden soll. Eine Schnittstelle wird verwendet, wenn wir wissen müssen, welche Aufgabe zu erledigen ist.