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.

Schnittstelle vs. abstrakte Klasse in Java

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));
    }
}