Eine abstrakte Klasse in Java muss keine Methoden von ihrer implementierenden Schnittstelle implementieren. Warum?

8

Sehen wir uns das folgende einfache Code-Snippet in Java an.

%Vor%

Da die Schnittstelle Summe , die nur eine Methode showSum(); enthält, von der abstrakten Klasse Super implementiert wird, sollte die abstrakte Klasse Super um diese Methode zu implementieren showSum(); . Der Compiler beklagt sich jedoch überhaupt nicht und das Programm funktioniert problemlos. Warum?

Ähnlich implementiert die nicht abstrakte letzte Klasse Berechnung die Schnittstelle Mul und enthält die tatsächliche Implementierung der Methode showMul(); , die in ihrer implementierenden Schnittstelle dargestellt wird. Falls diese Methode showMul() in der Klasse Berechnung kommentiert ist, wird ein Kompilierungsfehler ausgegeben. Warum gilt das Gleiche nicht für diese abstrakte Klasse Super ?

    
Bhavesh 06.11.2011, 11:02
quelle

4 Antworten

15

Die Klasse abstract ist keine echte Implementierungsklasse. Es kann abstract Methoden enthalten und nicht implement die Methoden von interface . Es ist Aufgabe der REAL-Implementierungsklasse, die Abstract / Interface-Methoden zu definieren.

Siehe diesen Unterschied zwischen der abstrakten Klasse und der Schnittstelle

%Vor%

Und hier ist eine echte Klasse, die AbsClass erweitert: Es ist Pflicht von RealClass, alle abstrakten Methoden und Schnittstellenmethoden zu definieren. Zusätzlich kann override die definierten Methoden in abstract class as gut.

%Vor%

Warum gibt es keinen Fehler bei der Kompilierung für AbsClass :  Wir können keine Instanzen der abstrakten Klasse erstellen. Aus diesem Grund ist es nicht sinnvoll, den Fehler zur Kompilierzeit anzuzeigen.

    
gtiwari333 06.11.2011, 11:14
quelle
4

Abstraktes Klassenverhalten ähnelt in diesem Fall Schnittstellen.

Aus dem Java-Tutorial : ... sind abstrakte Klassen ähnlich zu Schnittstellen, außer dass sie eine Teilimplementierung bereitstellen, so dass sie den Unterklassen überlassen wird, um die Implementierung abzuschließen. Wenn eine abstrakte Klasse nur abstrakte Methodendeklarationen enthält, sollte sie stattdessen als Schnittstelle deklariert werden

Sie implementieren keine Methoden in einer Schnittstelle, die eine andere Schnittstelle erweitert. Und Sie müssen Methoden nicht in einer abstrakten Klasse implementieren, die eine Schnittstelle implementiert.

    
Oleg Mikheev 06.11.2011 11:12
quelle
3

Weil es abstrakt ist. Eine abstrakte Klasse ist eine Klasse, die einige Methoden deklarieren darf, ohne irgendeine Implementierung dieser Methoden bereitzustellen, was konkrete Unterklassen dazu zwingt. Sie könnten die Methode hinzufügen

%Vor%

zur abstrakten Klasse, aber es wäre nur redundant mit der Methode, die bereits in der Schnittstelle deklariert wurde.

    
JB Nizet 06.11.2011 11:05
quelle
0

Dies sollte ein Kommentar zu JB Nizets Antwort sein, aber ich kann noch keine Kommentare posten :( Beachten Sie, dass Sie die Implementierung für die showSum () -Methode in Ihrer abstrakten Klasse bereitstellen können und dass diese Klasse weiterhin ohne Probleme abstrakt bleibt. Eine abstrakte Klasse könnte alle Methoden implementiert haben und immer noch abstrakt sein!

    
Zavior 06.11.2011 11:16
quelle

Tags und Links