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?