Geekflare wird von unserem Publikum unterstützt. Wir können Affiliate-Provisionen durch den Kauf von Links auf dieser Website verdienen.
Teilen:

Abstrakte Klasse Vs. Schnittstelle in Java: Erklärung mit Beispielen

abstrakte-klassen-vs-schnittstelle-in-java
Invicti Web Application Security Scanner – die einzige Lösung, die eine automatische Verifizierung von Schwachstellen mit Proof-Based Scanning™ bietet.

Abstrakte Klassen und Schnittstellen werden zur Abstraktion in Java verwendet. Abstraktion in der objektorientierten Programmierung bezieht sich auf das Verbergen von Implementierungsdetails vor den Endbenutzern.

In der Abstraktion können Sie wissen, was die Funktionalitäten sind, aber Sie können nicht wissen, wie sie implementiert wurden.

Schauen wir uns jeden von ihnen an und versuchen zu verstehen, warum sie verwendet werden.

Abstract Class

Eine Klasse, die nicht als Objekt instanziiert werden kann und möglicherweise abstrakte Methoden enthält, wird als abstrakte Klasse in bezeichnet Java. Eine abstrakte Methode ist eine Methode, die bei der Deklaration keinen Implementierungsrumpf hat.

abstraktes Klassenbeispiel
Beispiel einer abstrakten Klasse GraphicObject – Oracle

Sie können eine abstrakte Klasse erstellen, indem Sie die angeben abstract Stichwort vor dem class Stichwort.

abstract class abstractClass {
    void run() {
        System.out.println("ran");
    }
}

Eine abstrakte Klasse kann durch andere Klassen erweitert werden. Mit anderen Worten, es kann auch Unterklassen erstellt werden.

abstract class AbstractClass {
    void run() {
        System.out.println("ran");
    }
}

class ExtendingAbstractClass extends AbstractClass {
    void newMethod() {
        System.out.println("new");
    }

    @Override
    void run() {
        System.out.println("override");
    }
}

Abstrakte Klassen werden verwendet, um gemeinsame Methoden zwischen mehreren Klassen zu implementieren, die eine gegebene abstrakte Klasse erweitern. Die Fähigkeit, abstrakte Methoden innerhalb abstrakter Klassen zu definieren, macht sie außerdem unglaublich nützlich für Klassen, die ähnliche Methoden, aber unterschiedliche Implementierungen haben. Nehmen wir ein Beispiel.

Stellen Sie sich ein Auto vor, das über einige Funktionen verfügt, wie z. B. Starten, Stoppen, Rückwärtsfahren usw. Diese Funktionen sind bei allen Arten von Autos gleich.

Aber was ist mit Automatisierungsfunktionalitäten wie dem autonomen Fahren? Die Implementierung dieser Funktionalitäten kann für verschiedene Fahrzeugtypen unterschiedlich sein. Sehen wir uns an, wie Sie ein damit zusammenhängendes objektorientiertes Programm erstellen können.

Erstellen Sie zunächst a Car Klasse, die um mehrere Klassen verschiedener Fahrzeugtypen erweitert wird.

abstract class Car {
    void start() {
        // implementation
        System.out.println("runs car");
    }

    void stop() {
        // implementation
        System.out.println("engine stops");
    }

    void reverse() {
        // implementation
        System.out.println("reverse mode enabled");
    }

    abstract void selfDrive();
}

Das Verfahren start(), stop() und reverse() sind Methoden, die in allen Autos üblich sind. Ihre Implementierung ist also bereits in der Car-Klasse selbst definiert. Ein bestimmter Autotyp kann jedoch unterschiedliche Implementierungen des Selbstfahrmodus haben. Und so können Sie definieren selfDrive() als abstrakte Methode und implementieren sie auf unterschiedliche Weise in verschiedenen Klassen verschiedener Fahrzeugtypen.

class CarTypeA extends Car {
    @Override
    void start() {
        super.start();
    }

    @Override
    void stop() {
        super.stop();
    }

    @Override
    void reverse() {
        super.reverse();
    }

    void selfDrive() {
        // custom implementation
        System.out.println("Type A self driving mode enabled");
    }
}
class CarTypeB extends Car {
    // ...all similar methods

    void selfDrive() {
        // custom implementation
        // different implementation than CarTypeB
        System.out.println("Type B self driving mode enabled");
    }
}

Es ist wichtig zu beachten, dass, wenn eine Unterklasse nicht alle abstrakten Methoden implementiert, die in der abstrakten Klasse definiert sind, sie selbst als abstrakte Klasse deklariert werden sollte.

Interface

Eine Schnittstelle ist eine Möglichkeit, einer Klasse mitzuteilen, welche Methoden von ihr implementiert werden müssen. Wenn Sie zum Beispiel das Beispiel eines Autos betrachten, hat es einige grundlegende Funktionen. Es kann starten, sich bewegen und stoppen. Diese Funktionen sind in allen Autos gleich.

Wenn Sie also eine Schnittstelle eines Autos in einer Klasse implementieren, müssen Sie alle Methoden implementieren, damit das Auto ordnungsgemäß und sicher funktioniert.

Ähnlich wie bei abstrakten Klassen können wir keine Objekte einer Schnittstelle instanziieren oder erstellen. Sie kann als vollständig abstrakte Klasse betrachtet werden, da sie nur abstrakte Methoden enthält, dh Methoden ohne einen Implementierungskörper.

Sie können eine Schnittstelle erstellen, indem Sie die verwenden interface Stichwort.

interface CAR {
    void start();
    void stop();
    void move();
}

Implementieren Sie eine Schnittstelle mit der implements Schlüsselwort beim Definieren einer Klasse.

class CarTypeB implements CAR {
    public void start() {
        System.out.println("started");
    }

    public void stop() {
        System.out.println("stopped");
    }

    public void move() {
        System.out.println("running");
    }
}

Similarity

Keine Instanziierung als Objekt ist das Einzige, was abstrakte Klassen und Interfaces gemeinsam haben.

Differences

Abstrakte KlasseSchnittstelle
Vererbung & ImplementierungVon einer Klasse kann nur eine abstrakte Klasse geerbt werden.Mehrere Schnittstellen können durch eine Klasse implementiert werden.
VariablentypenEs kann finale, nicht-finale, statische und nicht-statische Variablen haben.Es kann nur statische und finale Variablen haben.
MethodentypenEs kann sowohl abstrakte als auch nicht-abstrakte Methoden enthalten.Es kann nur abstrakte Methoden enthalten, aber statische Methoden sind eine Ausnahme.
ZugriffsmodifikatorenEine abstrakte Klasse kann einen Zugriffsmodifizierer haben.Die in der Schnittstelle definierten Methodensignaturen sind standardmäßig öffentlich. Eine Schnittstelle hat keinen Zugriffsmodifizierer.
Konstruktoren & DestruktorenEs kann Konstruktoren und Destruktoren deklarieren.Es kann keine Konstruktoren oder Destruktoren deklarieren.
GeschwindigkeitSchnellBremst
Unterschiede zwischen abstrakter Klasse und Schnittstelle

When to use abstract class and interface?

Verwenden Sie abstrakte Klassen, wenn:

  • Sie möchten einige gemeinsame Methoden und Felder für mehrere Klassen freigeben.
  • Erklären non-static funktioniert non-final Felder, um den Status des Objekts zu ändern, an das sie gebunden sind.

Sie können Schnittstellen verwenden, wenn:

  • Sie möchten das Verhalten einer Klasse definieren, die die Schnittstelle implementiert, aber es interessiert Sie nicht, wie sie implementiert wird.
  • Sie möchten sicherstellen, dass eine Klasse alle Methoden implementiert, um ordnungsgemäß zu funktionieren.

Zusammenfassung

Schnittstellen werden hauptsächlich zum Erstellen von APIs verwendet, da sie eine Struktur zum Implementieren von Funktionen bereitstellen können, ohne sich um die tatsächliche Implementierung kümmern zu müssen.

Abstrakte Klassen werden im Allgemeinen verwendet, um gemeinsame abstrakte und nicht abstrakte Methoden unter mehreren Klassen zu teilen, wodurch die abstrakte Klasse erweitert wird, um den Code besser wiederverwendbar zu machen.

Erfahren Sie mit Hilfe dieser mehr über Java Online-Kurse für Java. Bereiten Sie sich auf ein Vorstellungsgespräch zu Java vor? Hier sind einige Interviewfragen zur objektorientierten Programmierung.

Danke an unsere Sponsoren
Weitere großartige Lektüre zum Thema Entwicklung
Treiben Sie Ihr Geschäft an
Einige der Tools und Dienste, die Ihr Unternehmen beim Wachstum unterstützen.
  • Invicti verwendet das Proof-Based Scanning™, um die identifizierten Schwachstellen automatisch zu verifizieren und innerhalb weniger Stunden umsetzbare Ergebnisse zu generieren.
    Versuchen Sie es mit Invicti
  • Web-Scraping, Wohn-Proxy, Proxy-Manager, Web-Unlocker, Suchmaschinen-Crawler und alles, was Sie zum Sammeln von Webdaten benötigen.
    Versuchen Sie es mit Brightdata
  • Semrush ist eine All-in-One-Lösung für digitales Marketing mit mehr als 50 Tools in den Bereichen SEO, Social Media und Content-Marketing.
    Versuchen Sie es mit Semrush
  • Intruder ist ein Online-Schwachstellenscanner, der Cyber-Sicherheitslücken in Ihrer Infrastruktur findet, um kostspielige Datenschutzverletzungen zu vermeiden.
    MIT DER INTELLIGENTEN SCHADENKALKULATION VON Intruder