Unterschied zwischen abstrakter Klasse und Schnittstelle in Java
Hauptunterschied zwischen abstrakter Klasse und Schnittstelle in Java
- In Interface kann eine Klasse mehrere Schnittstellen implementieren, während die Klasse nur eine abstrakte Klasse erben kann.
- In Interface gibt es keine Zugriffsmodifikatoren. Es wird davon ausgegangen, dass alles, was innerhalb der Schnittstelle definiert ist, einen öffentlichen Modifikator hat, wohingegen die abstrakte Klasse einen Zugriffsmodifikator haben kann.
- Die Schnittstelle kann keine Datenfelder enthalten, wohingegen die abstrakte Klasse Datenfelder enthalten kann.
- Schnittstellen helfen dabei, die peripheren Fähigkeiten einer Klasse zu definieren, während eine abstrakte Klasse die Identität einer Klasse definiert.
Was ist eine abstrakte Klasse?
Eine Klasse, die das Schlüsselwort abstract in ihrer Deklaration hat, wird abstrakte Klasse genannt. Abstrakte Klassen sollten null oder mehr abstrakte Methoden haben, also Methoden ohne Hauptteil. Sie können mehrere konkrete Methoden haben. Mit abstrakten Klassen können Sie Blaupausen für konkrete Klassen erstellen. Aber die erbende Klasse sollte die abstrakte Methode implementieren. Abstrakte Klassen können nicht instanziiert werden.
Wichtige Gründe für den Einsatz von Schnittstellen
- Schnittstellen werden verwendet, um dies zu erreichen Abstraktion.
- Entwickelt, um die dynamische Methodenauflösung zur Laufzeit zu unterstützen
- Es hilft Ihnen, eine lose Kopplung zu erreichen.
- Ermöglicht Ihnen, die Definition einer Methode von der Vererbungshierarchie zu trennen
Wichtige Gründe für die Verwendung der abstrakten Klasse
- Abstrakte Klassen bieten Standardfunktionen für die Unterklassen.
- Bietet eine Vorlage für zukünftige spezifische Klassen
- Hilft Ihnen, eine gemeinsame Schnittstelle für seine Unterklassen zu definieren
- Die abstrakte Klasse ermöglicht die Wiederverwendbarkeit von Code.
Was ist eine Schnittstelle?
Die Schnittstelle ist eine Blaupause, die zur Implementierung einer Klasse verwendet werden kann. Die Schnittstelle enthält keine konkreten Methoden (Methoden mit Code). Alle Methoden einer Schnittstelle sind abstrakte Methoden. Eine Schnittstelle kann nicht instanziiert werden. Klassen, die Schnittstellen implementieren, können jedoch instanziiert werden. Schnittstellen enthalten niemals Instanzvariablen, sie können jedoch öffentliche statische Endvariablen enthalten (d. h. konstante Klassenvariablen).
Unterschied zwischen Schnittstelle und abstrakter Klasse in Java
Mit einer abstrakten Klasse können Sie Funktionen erstellen, die von Unterklassen implementiert oder überschrieben werden können, während Sie mit einer Schnittstelle nur Funktionen angeben, diese jedoch nicht implementieren können. Eine Klasse kann nur eine abstrakte Klasse erweitern, während eine Klasse mehrere Schnittstellen implementieren kann.
Parameter | Interface | Abstrakte Klasse |
---|---|---|
Schnelligkeit | Bremst | Schnell |
Mehrfachvererbung | Implementieren Sie mehrere Schnittstellen | Nur eine abstrakte Klasse |
Struktur | Abstrakte Methoden | Abstrakte und konkrete Methoden |
Wann zu verwenden | Zukünftige Erweiterung | Um Unabhängigkeit zu vermeiden |
Vererbung/Implementierung | Eine Klasse kann mehrere Schnittstellen implementieren | Die Klasse kann nur eine abstrakte Klasse erben |
Standardimplementierung | Beim Hinzufügen neuer Dinge zur Schnittstelle ist es ein Albtraum, alle Implementierer zu finden und neu definierte Dinge zu implementieren. | Im Falle einer abstrakten Klasse können Sie die Standardimplementierung nutzen. |
Zugriffsmodifikatoren | Die Schnittstelle verfügt über keine Zugriffsmodifikatoren. Alles, was innerhalb der Schnittstelle definiert ist, wird als öffentlicher Modifikator angenommen. | Die abstrakte Klasse kann einen Zugriffsmodifikator haben. |
Wann zu verwenden | Es ist besser, die Schnittstelle zu verwenden, wenn verschiedene Implementierungen nur die Methodensignatur gemeinsam nutzen. Polymorphe Hierarchie von Werttypen. | Es sollte verwendet werden, wenn verschiedene Implementierungen derselben Art ein gemeinsames Verhalten aufweisen. |
Datenfelder | Die Schnittstelle darf keine Datenfelder enthalten. | Die Klasse kann Datenfelder haben. |
Mehrfachvererbung Standard | Eine Klasse kann zahlreiche Schnittstellen implementieren. | Eine Klasse erbt nur eine abstrakte Klasse. |
Umsetzung | Eine Schnittstelle ist abstrakt, sodass sie keinen Code bereitstellen kann. | Eine abstrakte Klasse kann vollständigen Standardcode bereitstellen, der überschrieben werden sollte. |
Verwendung von Access-Modifikatoren | Sie können keine Zugriffsmodifikatoren für die Methode, Eigenschaften usw. verwenden. | Sie können eine abstrakte Klasse verwenden, die Zugriffsmodifikatoren enthält. |
Anwendungsbereich | Schnittstellen helfen dabei, die peripheren Fähigkeiten einer Klasse zu definieren. | Eine abstrakte Klasse definiert die Identität einer Klasse. |
Definierte Felder | Es können keine Felder definiert werden | Mit einer abstrakten Klasse können Sie sowohl Felder als auch Konstanten definieren |
Erbe | Eine Schnittstelle kann mehrere Schnittstellen erben, jedoch keine Klasse. | Eine abstrakte Klasse kann eine Klasse und mehrere Schnittstellen erben. |
Konstruktor oder Destruktoren | Eine Schnittstelle kann keine Konstruktoren oder Destruktoren deklarieren. | Eine abstrakte Klasse kann Konstruktoren und Destruktoren deklarieren. |
Begrenzung der Erweiterungen | Es kann beliebig viele Schnittstellen erweitern. | Es kann jeweils nur eine Klasse oder eine abstrakte Klasse erweitert werden. |
Abstraktes Schlüsselwort | In einem abstrakten Schnittstellenschlüsselwort ist optional, um eine Methode als abstrakt zu deklarieren. | In einer abstrakten Klasse ist das Schlüsselwort abstract obligatorisch, um eine Methode als Abstract zu deklarieren. |
Klassentyp | Eine Schnittstelle kann nur öffentliche abstrakte Methoden haben. | Eine abstrakte Klasse verfügt über geschützte und öffentliche abstrakte Methoden. |
Beispielcode für Schnittstelle und abstrakte Klasse in Java
Nachfolgend finden Sie Beispielcode zum Erstellen einer Schnittstelle und einer abstrakten Klasse in Java
Schnittstellensyntax
interface name{ //methods }
Java Schnittstellenbeispiel:
interface Pet { public void test(); } class Dog implements Pet { public void test() { System.out.println("Interface Method Implemented"); } public static void main(String args[]) { Pet p = new Dog(); p.test(); } }
Abstrakte Klassensyntax
abstract class name{ // code }
Beispiel für eine abstrakte Klasse:
abstract class Shape { int b = 20; abstract public void calculateArea(); } public class Rectangle extends Shape { public static void main(String args[]) { Rectangle obj = new Rectangle(); obj.b = 200; obj.calculateArea(); } public void calculateArea() { System.out.println("Area is " + (b * b)); } }