Literatur

Nutzung mehrerer Interfaces in einer Klasse

Da wir in Java nur eine indirekte Mehrfachvererbung über das Einbinden mehrerer Interfaces simulieren können, wollen wir uns jetzt etwas näher mit diesem Thema befassen.

Das Einbinden von mehreren Interfaces ist nicht immer möglich. Es kann z.B. sein, dass die gleiche Methode in zwei Interfaces deklariert ist und die Methodendeklarationen sich nur durch den Rückgabewert unterscheiden. In diesem Fall ist die Einbindung von diesen beiden Interfaces gleichzeitig nicht möglich. Sollten die beiden Methodendeklarationen gleich sein, so ist das Einbinden der beiden Interfaces möglich, die Methode ist dann allerdings auch nur einmal in der Klasse vorhanden.

Konstanten von unterschiedlichen Interfaces können zwar denselben Namen, aber einen anderen Wert haben. Dies sollte allerdings vermieden werden. Man kann dann allerdings mit der Angabe des Interfacenamens auf die jeweilige Konstante zugreifen.

Schauen wir uns dazu direkt einmal ein Beispiel an.

Beispiel:

 
// Interface Schnitt1
interface Schnitt1
{
    /* Konstanten VAR1 und VAR2 */
    public static final int VAR1 =1;
    public static final int VAR2 =2;
 
    /* Methode setWert mit einem Übergabeparameter vom Datentyp int */
    public void setWert(int wert);
}
 
// Interface Schnitt2
interface Schnitt2
{
    /* Konstanten VAR1 und VAR3 (VAR1 ist schon im Interface Schnitt1 deklariert) */
    public static final int VAR1 =3;
    public static final int VAR3 =4;
 
    /* Methode setWert mit einem Übergabeparameter vom Datentyp int (identisch mit der Methode aus Schnitt1) */
    public void setWert(int wert);
}
 
/* Startklasse Test, die unsere Interfaces Schnitt1 u. Schnitt2 einbindet */
public class Test implements Schnitt1, Schnitt2
{
    /* lokal definierte Konstante VAR1 */
    private static final int VAR1 = 10;
 
    /* implementierte Methode aus dem Interface Schnitt1 und Schnitt2 */
    public void setWert(int wert)
    {    
            /* Anweisungen */
    }
 
    // main-Methode
    public static void main (String [ ] args)
    {
        /* Ausgabe der Konstanten, wie lautet hier die Ausgabe? */
        System.out.println(VAR1);
        System.out.println(VAR2);
        System.out.println(VAR3);
        System.out.println(Schnitt1.VAR1);
        System.out.println(Schnitt2.VAR1);
    }
}

In dem obigen Beispiel haben wir zwei Interfaces Schnitt1 und Schnitt2. Beide besitzen jeweils zwei Konstanten und eine Methode. Anschließend folgt die Startklasse Test, welche unsere beiden Interfaces Schnitt1 und Schnitt2 einbindet.
Die Methode aus den Interfaces Schnitt1 und Schnitt2 ist unkritisch, da sie in beiden Klassen gleich deklariert ist. Zusätzlich besitzen die Interfaces jeweils eine Konstante mit gleichem Namen VAR1, aber unterschiedlichem Wert und jeweils eine komplett unterschiedliche Konstante, VAR2 und VAR3.
Unsere Startklasse Test implementiert nun beide Interfaces. Die Klasse Test besitzt noch eine eigene Konstante mit dem Namen VAR1. Insgesamt gibt es die Konstante VAR1 also dreimal mit jeweils einem anderen Wert. Die Methode setWert wird in der Klasse Test implementiert, d.h. wir geben ihr an dieser Stelle einen Methodenrumpf.

In der main-Methode geben wir nun die Konstanten aus. Wie lautet hier die Ausgabe?