Richard: Extend, Implement, Abstract

Beitrag lesen

Hallo Michilee,

In einem Interface werden Methoden definiert, aber nicht implementiert. Die Implementierung dieser Methoden übernimmt die Klasse, die das Interface mit dem Schlüsselwort implements implementiert.

oki doki, d.h., dass in einem interface es überhaupt keine fertigen methoden geben darf, bzw. kann, die man dann später nutzt?

Richtig, ein Interface definiert nur die minimale öffentliche Schnittstelle die eine implementierende Klasse hat.

Öffentlich oder Paketsichbare (?) rufe ich dann direkt einfach auf?

Klassenname.variable?

Ja, wenn sie statisch sind. Andernfalls erzeugst du zunächst ein Objekt der Klasse und rufst auf diesem die Variablen/Methoden auf.

Es gibt ja manchmal static final variablen, wo man dann den Wert ablesen kann. Hatte ich in manchen Codes auch gesehen, ohne, dass man glaube ich ein Objekt von der Klasse bildete. (Hatte aber den Code nicht geprüft, ob der lief/funktionierte)

Richtig, statische Variablen werden ohne konkretes Objekt aufgerufen. Sie haben daher unabhängig von Objekten der Klasse immer denselben Wert, weshalb man sie bisweilen mit globalen Variablen gleichsetzt. Sind sie darüberhinaus final, können sie nach einmaliger Wertzuweisung nicht mehr verändert werden. Es handelt sich dann um globale Konstanten.

Serializable ist ein schlechtes Beispiel, da es genau keine Methoden vorschreibt.

Dann hat die implementierung irgendwie wenig Sinn?

Doch, siehe Rouvens Antwort. Jede Klasse, die Serializable implementiert, ist dann selbst auch von diesem Typ und kann überall, wo ein Serializable als Datentyp gefordert wird, übergeben werden.

D.h., wenn mir ein Interface eine Methode etwas vorschreibt, dann müsste ich auch Wissen (nachschauen), was in der zu implementierte Methode gemacht werden muss/soll.

Ja, im Idealfall ist das bereits durch Rückgabewert in Kombination mit dem Methodennamen intuitiv ersichtlich.

Ich hatte dann auch gesehen, dass man da ganz verschieden Objekte Bilden konnte.

Auto a= new Auto()
Auto a = new VW()

Auto und VW sind Klassen, a ist ein Objekt.

Von abtract konnte man glaub kein Objekt bilden, aber von Interface schon.

Man kann von beidem keine Objekte erzeugen.

Grüße
Richard