Nein. Instanzvariablen (so wie y
)
können nicht in eine Schnittstelle gestellt werden.
Nur Konstanten und Methoden.
interface IrgendeineSchnittstelle
{
public final int X = 32;
public double y; // keine Instanzvariablen erlaubt
public double addiereAuf( );
}
Eine Klassendefinition kann immer nur genau eine Superklasse erweitern, aber sie kann 0, eine oder mehrere Schnittstellen implementieren:
class IrgendeineKlasse extends Superklasse implements IrgendeineSchnittstelle { Körper der üblichen Klassendefinition }
Der Teil extends Superklasse
muss vor
implements
IrgendeineSchnittstelle
stehen.
Wenn eine Klasse Object
erweitert wird der extend
Teil nicht benötigt.
Der Körper der Klassendefinition ist der gleiche wie immer. Aber da die Klasse eine Schnittstelle implementiert, muss der Klassenkörper jede Methode der Schnittstelle definieren oder erben. Hier ist eine Klassendefinition, die drei Schnittstellen implementiert:
public class GrosseKlasse extends Superklasse implements SchnittstelleA, SchnittstelleB, SchnittstelleC { Körper der Klassendefinition }
Jetzt muss GrosseKlasse
die Methoden entweder von Superklasse
erben oder eine Methodendefinition für die Methoden der drei Schnittstellen zur Verfügung stellen.
Eine beliebigen Anzahl von Klassen können dieselbe Schnittstelle implementieren. Die Implementationen der in einer Schnittstelle gelisteten Methoden kann in jeder Klasse eine andere sein. Alles was sie zu tun hat ist Methodenkörper zu implementieren, die mit den Methodenheadern der Schnittstellen übereinstimmen.
public class KleineKlasse implements SchnittstelleA { Körper der üblichen Klassendefinition }
Ist die oben stehende Klassendefinition korrekt? Welche Superklasse erweitert sie?