Interfacce Annidate in Java

Concetti Chiave
  • Java consente di dichiarare interfacce annidate, che sono interfacce definite all'interno di classi o altre interfacce.
  • Le interfacce annidate possono essere dichiarate come public, private o protected.
  • Per utilizzare un'interfaccia annidata al di fuori della sua classe o interfaccia di appartenenza, è necessario qualificare il suo nome con il nome della classe o dell'interfaccia che la contiene.

Interfacce annidate

Un'interfaccia può essere dichiarata membro di una classe o di un'altra interfaccia.

Una tale interfaccia è chiamata interfaccia membro o interfaccia annidata. Un'interfaccia annidata può essere dichiarata come public, private o protected.

Questo differisce da un'interfaccia di primo livello, che deve essere dichiarata come public oppure utilizzare il livello di accesso predefinito, come precedentemente descritto.

Quando un'interfaccia annidata viene utilizzata al di fuori del proprio ambito di inclusione, deve essere qualificata con il nome della classe o dell'interfaccia di cui è membro. Quindi, al di fuori della classe o interfaccia in cui un'interfaccia annidata è dichiarata, il suo nome deve essere pienamente qualificato.

Ecco un esempio che dimostra un'interfaccia annidata:

// Un esempio di interfaccia annidata.

// Questa classe contiene un'interfaccia membro.
class A {
    // questa è un'interfaccia annidata
    public interface InterfacciaAnnidata {
        boolean nonÈNegativo(int x);
    }
}
// B implementa l'interfaccia annidata.
class B implements A.InterfacciaAnnidata {
    public boolean nonÈNegativo(int x) {
        return x < 0 ? false : true;
    }
}

class DimostrazioneInterfacciaAnnidata {
    public static void main(String[] args) {

        // uso di un riferimento all'interfaccia annidata
        A.InterfacciaAnnidata rif = new B();

        if(rif.nonÈNegativo(10))
            System.out.println("10 non è negativo");
        if(!rif.nonÈNegativo(-12))
            System.out.println("questo non verrà visualizzato");
    }
}
Consiglio

Uso del nome qualificato

Si noti che A definisce un'interfaccia membro chiamata InterfacciaAnnidata e che è dichiarata public. Successivamente, B implementa l'interfaccia annidata specificando

implements A.InterfacciaAnnidata

Si noti che il nome è pienamente qualificato dal nome della classe che la racchiude. All'interno del metodo main(), viene creato un riferimento di tipo A.InterfacciaAnnidata chiamato rif, e gli viene assegnato un riferimento a un oggetto di tipo B. Poiché B implementa A.InterfacciaAnnidata, ciò è legale.