Classe internaNella programmazione orientata agli oggetti (OOP, Object Oriented Programming) una classe interna (dall'inglese classe nidificata o una classe interna) è una classe dichiarata all'interno di un'altra classe o classe di interfaccia. Si trovano in linguaggi come Java, a partire dalla versione 1.1, o D. In Python, è possibile creare una classe interna all'interno di una classe, metodo o funzione. GeneralitàUn'istanza di una normale o principale classe può esistere da sola. Invece, un'istanza di una classe interna, non può essere istanziata senza essere collegata con una classe principale. Prendiamo come una nozione astratta una Abbiamo la classe principale Le classi interne ci forniscono un meccanismo per modellare accuratamente questa connessione. Le classi interne pertanto riguardano l'orientamento dell'oggetto di alcune parti del programma che non sarebbero altrimenti incapsulate in una classe. Grandi pezzi di codice all'interno di una classe potrebbero essere modellati o riscritti come una separata classe principale piuttosto di una classe interna. Ciò rende il codice più generale nella sua applicazione e quindi riusabile ma potrebbe potenzialmente essere una prematura generalizzazione. Può risultare più efficace, se il codice ha molte classi interne con la funzionalità condivisa. I tipi delle classi interneIn Java esistono molti tipi di classi interne che si divido in quattro differenti gruppi:
Le classi statiche in JavaLe classi interne dichiarate con la parola chiave static, funzionano come le comuni classi statiche; non sono collegate ad un'istanza ma possono accedere solo alle variabili e ai metodi statici della classe contenitrice. I tipi esterni dovevano anteporre al nome della classe interna quello della classe contenitrice. Le classi interne sono implicitamente statiche. /*Classe contenitrice */
public class ClasseContenitrice
{
private static String variableStatica = "variable statica";
// Costruttore della classe contenitrice
public ClasseContenitrice()
{
}
//Metodo statico che può richiamare la classe interna statica
public static void staticMetodo(){
InterfacciaInterna ic = new ClasseInterna();
ic.stampa();
}
//Classe interna statica
private static class ClasseInterna implements InterfacciaInterna
{
//Costruttore della classe interna statica
public ClasseInterna()
{
}
/*Implementazione della classe interna
* Richiamare la variabile statica dalla classe contenente*/
public void stampa(){
System.out.println(variabileStatica);
}
}
//Interfaccia interna (implicitamente statica)
private interface InterfacciaInterna{
public void stampa();
}
}
Ogni istanza di una classe interna si riferisce ad un'istanza della classe contenitrice, fatta eccezione per le classi interne locali e le classi anonime dichiarate in un contesto statico. Pertanto, esse possono implicitamente fare riferimento a variabili e metodi della classe contenitrice dell'istanza. Il riferimento della classe interna all' istanza può essere ottenuto tramite Information related to Classe interna |