14 Unterschied zwischen abstrakter Klasse und Schnittstelle in Java

Contents

Abstrakte Klasse

Eine abstrakte Klasse ist eine Klasse, die als abstrakt  deklariert wird  – sie kann abstrakte Methoden enthalten oder nicht. Abstrakte Klassen können nicht instanziiert, aber in Unterklassen unterteilt werden. Eine abstrakte Klasse kann statische Felder und statische Methoden haben. Wenn eine abstrakte Klasse eine Unterklasse bildet, stellt die Unterklasse normalerweise Implementierungen für alle abstrakten Methoden in ihrer übergeordneten Klasse bereit. Ist dies jedoch nicht der Fall, muss die Unterklasse ebenfalls als abstrakt deklariert werden. Eine abstrakte Methode ist eine Methode, die ohne Implementierung (ohne geschweifte Klammern und gefolgt von einem Semikolon) deklariert wird.

Beispiel für eine abstrakte Klasse

Wann zu verwenden

Ziehen Sie in Erwägung, abstrakte Klassen zu verwenden, wenn eine dieser Aussagen auf Ihre Situation zutrifft:

  1. Sie möchten Code für mehrere eng verwandte Klassen freigeben.
  2. Sie erwarten, dass Klassen, die Ihre abstrakte Klasse erweitern, über viele gemeinsame Methoden oder Felder verfügen oder andere Zugriffsmodifizierer als public erfordern (z. B. protected und private).
  3. Sie möchten nicht statische oder nicht endgültige Felder deklarieren. Auf diese Weise können Sie Methoden definieren, die auf den Zustand des Objekts, zu dem sie gehören, zugreifen und ihn ändern können.

Was Sie über abstrakte Klassen wissen müssen

  • Eine abstrakte Klasse definiert die Identität einer Klasse.
  • Abstrakte Klasse ist schnell.
  • Abstrakte Klassen können sowohl abstrakte als auch konkrete Methoden haben.
  • Abstrakte Klassen können finale, nicht finale, statische und nicht statische Variablen haben.
  • Eine abstrakte Klasse kann eine Klasse und mehrere Schnittstellen erben.
  • Die abstrakte Klasse wird mit dem abstrakten Schlüsselwort deklariert.
  • Abstract kann Klassenmitglieder wie private, öffentliche, geschützte usw. haben.
  • Eine abstrakte Klasse kann eine andere Java-Klasse erweitern und mehrere Java-Schnittstellen implementieren.
  • Ein Abstract kann mit dem Schlüsselwort ”extends” erweitert werden.
  • Die abstrakte Klasse kann die Implementierung der Schnittstelle bereitstellen.
  • Eine abstrakte Klasse kann Konstruktoren und Destruktoren deklarieren.
  • In einer abstrakten Klasse ist das abstrakte Schlüsselwort obligatorisch, um eine Methode als abstrakt zu deklarieren.
  • Abstrakte Klassen sollten verwendet werden, wenn verschiedene Implementierungen der gleichen Art ein gemeinsames Verhalten aufweisen.
  • Abstrakte Klasse kann einen Zugriffsmodifizierer haben.

Schnittstelle

Eine Schnittstelle ist lediglich die Deklaration von Methoden eines Objekts; es ist nicht die Umsetzung. In einer Schnittstelle definieren wir, welche Art von Operation ein Objekt ausführen kann. Diese Operationen werden durch die Klassen definiert, die die Schnittstelle implementieren. Schnittstellen bilden einen Vertrag zwischen der Klasse und der Außenwelt, und dieser Vertrag wird zur Build-Zeit vom Compiler durchgesetzt.

Beispiel einer Schnittstelle

Wann zu verwenden

Ziehen Sie die Verwendung von Schnittstellen in Betracht, wenn eine dieser Aussagen auf Ihre Situation zutrifft:

  1. Sie erwarten, dass nicht verwandte Klassen Ihre Schnittstelle implementieren. Beispielsweise werden die Schnittstellen Comparable und Cloneable von vielen nicht verwandten Klassen implementiert.
  2. Sie möchten das Verhalten eines bestimmten Datentyps angeben, sich aber nicht darum kümmern, wer sein Verhalten implementiert.
  3. Sie möchten Mehrfachvererbungen nutzen.

Was Sie über die Schnittstelle wissen müssen

  • Schnittstellen helfen, die peripheren Fähigkeiten einer Klasse zu definieren.
  • Schnittstelle ist langsam.
  • Interface kann nur abstrakte Methoden haben. Ab Java 8 kann es sowohl Standard- als auch statische Methoden haben.
  • Interface hat nur statische und finale Variablen.
  • Eine Schnittstelle kann mehrere Schnittstellen erben, aber keine Klasse.
  • Die Schnittstelle wird mit dem Schlüsselwort interface deklariert.
  • Mitglieder einer Java-Schnittstelle sind standardmäßig öffentlich.
  • Eine Schnittstelle kann nur eine andere Java-Schnittstelle erweitern.
  • Eine Schnittstelle kann mit dem Schlüsselwort ”implements” implementiert werden.
  • Die Schnittstelle kann die Implementierung einer abstrakten Klasse nicht bereitstellen.
  • Eine Schnittstelle kann keine Konstruktoren und Destruktoren deklarieren.
  • In einem Abstract ist das Schlüsselwort interface optional, um eine Methode als Abstract zu deklarieren.
  • Die Schnittstelle wird verwendet, wenn verschiedene Implementierungen nur die Methodensignatur teilen. Polymorphe Hierarchie von Werttypen.
  • Die Schnittstelle hat keine Zugriffsmodifikatoren. Alles, was in der Schnittstelle definiert ist, wird als öffentlicher Modifikator angenommen.

Lesen Sie auch: Unterschied zwischen Wurf und Wurf in Java

Unterschied zwischen abstrakter Klasse und Schnittstelle in Tabellenform

VERGLEICHSGRUNDLAGEABSTRAKTE KLASSESCHNITTSTELLE
FunktionEine abstrakte Klasse definiert die Identität einer Klasse.  Schnittstellen helfen, die peripheren Fähigkeiten einer Klasse zu definieren.  
GeschwindigkeitAbstrakte Klasse ist schnell.  Schnittstelle ist langsam.  
MethodenAbstrakte Klassen können sowohl abstrakte als auch konkrete Methoden haben.  Interface kann nur abstrakte Methoden haben. Ab Java 8 kann es sowohl Standard- als auch statische Methoden haben.  
VariablenAbstrakte Klassen können finale, nicht finale, statische und nicht statische Variablen haben.  Interface hat nur statische und finale Variablen.  
NachlassEine abstrakte Klasse kann eine Klasse und mehrere Schnittstellen erben.  Eine Schnittstelle kann mehrere Schnittstellen erben, aber keine Klasse.  
StichwortDie abstrakte Klasse wird mit dem abstrakten Schlüsselwort deklariert.  Die Schnittstelle wird mit dem Schlüsselwort interface deklariert.  
MitgliederAbstract kann Klassenmitglieder wie private, öffentliche, geschützte usw. haben.  Mitglieder einer Java-Schnittstelle sind standardmäßig öffentlich.  
ImplementierungEine abstrakte Klasse kann eine andere Java-Klasse erweitern und mehrere Java-Schnittstellen implementieren.  Eine Schnittstelle kann nur eine andere Java-Schnittstelle erweitern.  
ImplementierungsschlüsselwortEin Abstract kann mit dem Schlüsselwort ”extends” erweitert werden.  Eine Schnittstelle kann mit dem Schlüsselwort ”implements” implementiert werden.  
FlexibilitätDie abstrakte Klasse kann die Implementierung der Schnittstelle bereitstellen.  Die Schnittstelle kann die Implementierung einer abstrakten Klasse nicht bereitstellen.  
Konstruktoren & DestruktorenEine abstrakte Klasse kann Konstruktoren und Destruktoren deklarieren.  Eine Schnittstelle kann keine Konstruktoren und Destruktoren deklarieren.  
Abstraktes SchlüsselwortIn einer abstrakten Klasse ist das abstrakte Schlüsselwort obligatorisch, um eine Methode als abstrakt zu deklarieren.  In einem Abstract ist das Schlüsselwort interface optional, um eine Methode als Abstract zu deklarieren.  
VerwendungAbstrakte Klassen sollten verwendet werden, wenn verschiedene Implementierungen der gleichen Art ein gemeinsames Verhalten aufweisen.  Die Schnittstelle wird verwendet, wenn verschiedene Implementierungen nur die Methodensignatur teilen. Polymorphe Hierarchie von Werttypen.  
ZugriffsmodifikatorAbstrakte Klasse kann einen Zugriffsmodifizierer haben.  Die Schnittstelle hat keine Zugriffsmodifikatoren. Alles, was in der Schnittstelle definiert ist, wird als öffentlicher Modifikator angenommen.  

Lesen Sie auch : Unterschied zwischen Iterator und Aufzählung

osky