Was ist der Unterschied zwischen Abstract Class und Interface in Java?



Dieser Artikel hilft Ihnen, den Hauptunterschied zwischen abstrakter Klasse und Schnittstelle in Java anhand eines Beispielprogramms zu verstehen.

Abstrakte Klassen und Schnittstellen sind die beiden Hauptbausteinedes . Obwohl beide hauptsächlich zur Abstraktion verwendet werden, unterscheiden sie sich stark voneinander und können nicht austauschbar verwendet werden. In diesem Artikel wollen wir herausfinden, was der Unterschied zwischen abstrakter Klasse und Schnittstelle in Java ist.

In diesem Artikel werden folgende Themen behandelt:





Um die Unterschiede zwischen abstrakter Klasse und Schnittstelle in zu verstehen müssen Sie wissen, was eine abstrakte Klasse ist und was eine Schnittstelle ist. Beginnen wir also damit, zu diskutieren, was das ist.

Was ist Abstract Class in Java?

In jeder Programmiersprache, Abstraktion bedeutet, die irrelevanten Details vor dem Benutzer zu verbergen, um sich nur auf die wesentlichen Details zu konzentrieren, um die Effizienz zu steigern und dadurch die Komplexität zu verringern. In Java wird die Abstraktion mit erreicht abstrakte Klassen . Eine abstrakte Klasse erfasst gemeinsame Merkmale von Unterklassen und kann eine abstrakte Methode enthalten oder nicht. Es kann nicht instanziiert werden, sondern kann nur von seinen Unterklassen als Oberklasse verwendet werden. Hier ist ein Beispielprogramm, das eine abstrakte Klasse demonstriert:



Hinweis: Ein abstrakte Methode ist eine Methode, die nicht implementiert ist und hinzufügtUnvollständigkeit zu Klasse .

Paket MyPackage // abstrakte Klasse abstrakte Klasse Animal {String AnimalName = '' Animal (String name) {this.AnimalName = name} // nicht abstrakte Methoden deklarieren // Standardimplementierung public void BasicInfo (String details) {System. out.println (this.AnimalName + '' + details)} // abstrakte Methoden, die // von ihren Unterklassen implementiert werden abstrakte öffentliche Leere Lebensraum () abstrakte öffentliche Leere Atmung ()} Klasse Terrestrisch erweitert Tier {// Konstruktor Terrestrial (String name) {super (name)} @Override public void Habitat () {System.out.println ('an Land lassen und')} @Override public void respiration () {System.out.println ('respire durch Lunge oder Luftröhre. ')}} Klasse Aquatic erweitert Tier {// Konstruktor Aquatic (String name) {super (Name)} @Override public void Habitat () {System.out.println (' Es verlässt im Wasser und ') } @Override public void respiration () {System.out.println ('durch Kiemen oder deren Haut atmen.')}} Klasse AbstractClassDemo {public static voi d main (String [] args) {// Objekt der terrestrischen Klasse erstellen // und Tierklassenreferenz verwenden. Animal object1 = new Terrestrial ('Humans') object1.BasicInfo ('sind terrestrische Wesen, sie') object1.habitat () object1.respiration () System.out.println ('') // Erstellen der Objekte der Kreisklasse Animal object2 = new Aquatic ('Fishes') object2.BasicInfo ('sind aqautische Wesen, sie') object2.habitat () object2.respiration ()}}

Ausgabe

Menschen sind irdische Wesen, sie verlassen das Land und atmen durch Lunge oder Luftröhre. Fische sind aqautische Wesen, sie verlassen sie im Wasser und atmen durch Kiemen oder ihre Haut.

Das Basisinformation () ist eine Methode, die von geteilt wird Terrestrisch und Wasser Klassen. Schon seit Tierklasse kann nicht initiiert werden, wir erstellen die Objekte von Terrestrisch und Wasser Klassen für Programmierzwecke. Als nächstes haben wir Schnittstellen.



Schnittstelle in Java

Ein anderer Weg zu erreichen Abstraktion in Java ist mit Schnittstellen .Eine Schnittstelle ist eine Sammlung abstrakter Methoden, sie hat keine konkreten im Gegensatz zu einer abstrakten Klasse. Im Gegensatz zur abstrakten Klasse bietet eine Schnittstelle eine vollständige Abstraktion in Java. Es kann sowohl Methoden als auch Variablen wie eine Klasse haben. Die in einer Schnittstelle deklarierten Methoden sind jedoch standardmäßig abstrakt.Hier ist eine abstrakte Klasse demonstrieren:

Verwendung von Alert in Javascript
Paket MyPackage-Schnittstelle Animals {// abstrakte Methoden void Habitat () void Respiration ()} Klasse TerrestrialA implementiert Animals {String AnimalName = '' // Konstruktor TerrestrialA (String name) {this.AnimalName = name} @Override public void Habitat () {System.out.println (this.AnimalName + 'an Land lassen und')} @Override public void respiration () {System.out.println ('durch Lunge oder Luftröhre atmen.')}} Klasse AquaticA implementiert Animals {String AnimalName = '' // Konstruktor AquaticA (String name) {this.AnimalName = name} @Override public void Habitat () {System.out.println (this.AnimalName + 'im Wasser lassen und')} @Override public void respiration () {System.out.println ('durch Kiemen oder deren Haut atmen.')}} Klasse JavaInterfaceDemo {public static void main (String [] args) {// Erstellen des Objekts der terrestrischen Klasse // und Verwenden der Tierklassenreferenz . Tiere object1 = new TerrestrialA ('Humans') object1.habitat () object1.respiration () System.out.println ('') // Erstellen der Objekte der Kreisklasse Animals object2 = new AquaticA ('Fishes') object2.habitat () object2.respiration ()}}

Ausgabe

Menschen verlassen das Land und atmen durch Lunge oder Luftröhre. Fische verlassen das Wasser und atmen durch Kiemen oder deren Haut.

Wenn Sie keinen gemeinsamen Code zwischen Ihrem haben Klassen , dann können Sie für die Schnittstelle gehen. Eine Schnittstelle ähnelt eher einer Blaupause einer Klasse, da sie keine nicht abstrakten Methoden enthält.

Anhand des obigen Inhalts haben Sie möglicherweise den Hauptunterschied zwischen abstrakter Klasse und Schnittstelle in bemerkt . Was im Gegensatz zu abstrakten Klassen eine Schnittstelle voll bietet Abstraktion in Java. Lassen Sie uns nun weitere Unterschiede auflisten.

Abstrakte Klasse gegen Schnittstelle

In der folgenden Tabelle sind die wichtigsten Unterschiede zwischen abstrakter Klasse und Schnittstelle aufgeführt.

Parameter Abstrakte Klasse Schnittstelle

Implementierung der Standardmethode

Es kann eine Standardmethodenimplementierung haben

Schnittstellen bieten reine Abstraktion und können überhaupt nicht implementiert werden

Variablen

Es kann nicht endgültige Variablen enthalten.

In einer Schnittstelle deklarierte Variablen sind standardmäßig final

Verwendetes Schlüsselwort

Eine abstrakte Klasse kann mit dem Schlüsselwort „erweitert

Die Schnittstelle sollte mithilfe von Schlüsselwortelementen implementiert werden

Zugriffsmodifikatoren

Kannhaben öffentlichen, geschützten, privaten und Standard-Modifikator

Schnittstellenmethoden sind standardmäßig öffentlich. Sie können damit keinen anderen Zugriffsmodifikator verwenden

Geschwindigkeit der Implementierung

Es ist schneller als die Schnittstelle

Eine Schnittstelle ist etwas langsamer und erfordert zusätzliche Indirektion

flache vs tiefe Kopie Java

Normale Klasse

Es kann nur eine abstrakte Klasse erweitern

Kann mehrere Schnittstellen implementieren

Konstruktoren

Eine abstrakte Klasse kann Konstruktoren haben

Eine Schnittstelle kann keine Konstruktoren haben

Mehrfachvererbung

Eine abstrakte Klasse kann eine andere Klasse erweitern und mehrere Java-Schnittstellen implementieren

Die Schnittstelle kann nur eine andere Java-Schnittstelle erweitern

Nun haben Sie die wichtigsten Unterschiede zwischen abstrakter Klasse und Schnittstelle in Java. Aber wie entscheiden Sie, wann Sie welche dieser beiden verwenden?

Wann wird die abstrakte Klasse verwendet und wann wird die Schnittstelle verwendet?

Erwägen Sie die Verwendung abstrakter Klassen in den folgenden Fällen:

  • Wenn Sie einige verwandte Klassen haben, die die teilen müssen gleiche Codezeilen
  • Wenn Sie das definieren möchten nicht statische oder nicht endgültige Felder
  • Wenn es gibtMethoden oder Felderoder erfordern Zugriffsmodifikatoren anders als öffentlich (wie geschützt und privat)

Erwägen Sie die Verwendung von Schnittstellen in den folgenden Fällen:

  • Wenn Sie erreichen wollen reine Abstraktion
  • Wenn Sie beschäftigen möchten mehrere dhImplementieren Sie mehr als eine Schnittstelle
  • Wenn Sie das Verhalten eines bestimmten Datentyps angeben möchten, sich aber nicht darum kümmern möchten, wer sein Verhalten implementiert.

Dies bringt uns zum Ende dieses Artikels. Ich habe eine der am häufigsten gestellten Java-Fragen im Interview behandelt, nämlich den Unterschied zwischen abstrakter Klasse und Schnittstelle in Java.

Stellen Sie sicher, dass Sie so viel wie möglich üben und Ihre Erfahrung zurücksetzen.

Besuche die von Edureka, einem vertrauenswürdigen Online-Lernunternehmen mit einem Netzwerk von mehr als 250.000 zufriedenen Lernenden auf der ganzen Welt. Wir sind hier, um Ihnen bei jedem Schritt auf Ihrer Reise zu helfen. Neben diesen Fragen zu Java-Interviews erstellen wir einen Lehrplan, der für Studenten und Fachleute konzipiert ist, die Java-Entwickler werden möchten.

Hast du eine Frage an uns? Bitte erwähnen Sie es im Kommentarbereich dieser 'Java Map-Oberfläche'. Artikel und wir werden uns so schnell wie möglich bei Ihnen melden.