Interface Unterschied von Attributen und Methoden bei abstrakten Klassen und Interfaces

Fasko

Mitglied
Hallo,

inwiefern unterscheiden sich Attribute und Methoden bei den Themen abstrakte Klassen und Interfaces.
Soweit ich das verstanden habe, müssen alle Klassen die ein Interface implementiert haben, die Methoden des jeweiligen Interfaces in der Klasse implementiert haben. Andernfalls gelten die Klassen als abstrakt bzw. müssen als abstrakt gekennzeichnet werden.

Die Methoden in der Interfaces-Klasse selber sind ohne Body sprich beispielsweise so:
public abstract void spielen();

Aber was ist mit jeglichen Attributen?

int a = 123;

oder ähnliches gibt es doch nicht in Interfaces. Schließlich, werden die Methoden ja auch nicht ausformuliert.Oder verwechsel ich da etwas. ???:L

Gruß,

Fasko
 
Einfach und Mehrfachvererbung
Bei abstrakten Klassen gibt es nur eine Einfachvererbung während mit Interfaces die Möglichkeit geboten wird, Mehrfachvererbungen zu nutzen.


Objektbildung möglich?
Die Objektbildung ist im Grunde bei beiden nicht möglich. Eine abstrakte Klasse als auch eine Schnittstelle, sind nicht als Objekt/Exemplar instanziierbar. Im Falle, dass die abstrakte Klasse abstrakt ist, weil eine Methode der implementierten Schnittstelle nicht eingebaut ist, kann eine implementierung der entsprechenden Methoden die Abstraktivität der Klasse aufheben.


Unterschiede bei den Attributen und Methoden
Die Methoden in Interfaces sind nicht vollständig implementiert. Ein Body fehlt IMMER. Dieser MUSS in der Klasse, die die jeweilige Schnittstelle implementiert hat, implementiert werden. Ansonsten gilt die Klasse als abstrakt bzw. hat als abstrakt markiert zu werden.
Der Compiler weiß, dass er die Methode aus der Klasse zu nehmen hat

In normalen abstrakten Klassen, kann der Body auch ausgeschrieben sein. Ist in der entsprechenden Klasse die Methode nicht implementiert, greift diese mittels Vererbung auf die Oberklasse (ggf. abstrakte) zu und bezieht diese daher.

Interfaces haben keine Attribute, abstrakte Klassen dagegen schon.

Unterschied Vererbung ohne Abstraktion und mit Abstraktion
Eine abstrakte Klasse kann nicht zu einem Exemplar/Objekt gebildet werden.
 
Der Uhu (Bubo bubo) ist eine Vogelart aus der Gattung der Uhus (Bubo), die zur Ordnung der Eulen (Strigiformes) gehört. Der Uhu ist die größte Eulenart. Uhus haben einen massigen Körper und einen auffällig dicken Kopf mit Federohren. Die Augen sind orangegelb. Das Gefieder weist dunkle Längs- und Querzeichnungen auf. Brust und Bauch sind dabei heller als die Rückseite.

Willst du auch mal ne Frage stellen oder was ist der Sinn dieses Threads?
 
inwiefern unterscheiden sich Attribute und Methoden bei den Themen abstrakte Klassen und Interfaces.

Was die Attribute (nicht-statische Variablen) anbelangt hat dir Schandro schon geantwortet: Interfaces können keine Attribute enthalten, abstrakte Klassen schon. Es gibt aber auch einen Unterschied bei statischen Variablen: Alle statischen Variablen eines Interfaces müssen Konstanten sein, d.h.
Code:
public static final
. Das muss bei abstrakten Klassen nicht der Fall sein.

Zwecks Methoden ist es ähnlich. Ein Interface enthält ausschließlich Methoden mit folgender Signatur:
Java:
public abstract <return type> <name> (<parameter list>)

Eine abstrakte Klasse ist da flexibler: Zum einen muss der Access Modifier der Methoden nicht unbedingt public sein (es geht auch protected oder package private), zum anderen müssen auch nicht alle Methoden abstrakt sein.

Soweit ich das verstanden habe, müssen alle Klassen die ein Interface implementiert haben, die Methoden des jeweiligen Interfaces in der Klasse implementiert haben. Andernfalls gelten die Klassen als abstrakt bzw. müssen als abstrakt gekennzeichnet werden.
Richtig.

Die Methoden in der Interfaces-Klasse selber sind ohne Body sprich beispielsweise so:
public abstract void spielen();
Genau. Und so sehen auch die abstrakten Methoden in abstrakten Klassen aus.

Aber was ist mit jeglichen Attributen?

int a = 123;

oder ähnliches gibt es doch nicht in Interfaces. Schließlich, werden die Methoden ja auch nicht ausformuliert.Oder verwechsel ich da etwas.
Siehe oben. int a = 123; geht durchaus in einem Interface. Du musst bei einem Interface bestimmte Modifier lediglich nicht hinschreiben, da sie vorausgesetzt werden und implizit eingefügt werden. also aus int a = 123; macht er automatisch:

Java:
public static final int a = 123;

Bei Methoden gilt das selbe. Du kannst zwar eine Methode definieren:

Java:
void x();

Aber intern sieht die dann trotzdem so aus:

Java:
public abstract void x();



...@Schandro: made may day :applaus:
 

Zurück
Oben