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.

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 Klasse | Schnittstelle | |
Vererbung & Implementierung | Von einer Klasse kann nur eine abstrakte Klasse geerbt werden. | Mehrere Schnittstellen können durch eine Klasse implementiert werden. |
Variablentypen | Es kann finale, nicht-finale, statische und nicht-statische Variablen haben. | Es kann nur statische und finale Variablen haben. |
Methodentypen | Es kann sowohl abstrakte als auch nicht-abstrakte Methoden enthalten. | Es kann nur abstrakte Methoden enthalten, aber statische Methoden sind eine Ausnahme. |
Zugriffsmodifikatoren | Eine abstrakte Klasse kann einen Zugriffsmodifizierer haben. | Die in der Schnittstelle definierten Methodensignaturen sind standardmäßig öffentlich. Eine Schnittstelle hat keinen Zugriffsmodifizierer. |
Konstruktoren & Destruktoren | Es kann Konstruktoren und Destruktoren deklarieren. | Es kann keine Konstruktoren oder Destruktoren deklarieren. |
Geschwindigkeit | Schnell | Bremst |
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
funktioniertnon-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.