Choose your language
feb 02

Che confusione!
Sui tipi annidati (nested type) e la classi interne (inner classes) in giro per la rete ci sono scritte un sacco di fregnacce! Probabilmente perché la SUN, a partire dalla versione 1.4 di java, ha fatto un po’ di casini con la nomenclatura, modificando il significato di alcuni termini. Comunque sia, ora proviamo a fare chiarezza.
Per prima cosa mettiamo in chiaro un concetto: le definizioni in informatica si danno e si usano in inglese. Ci si può riferire al corrispondente termine italiano per meglio comprendere di cosa si parla, ma è l’inglese che rende univoco un concetto o una definizione.
Torniamo quindi all’Università e alle definizioni :-)

Definizione:
Con il termine nested type (tipi annidati) si intende indicare:

  • nested classes
  • nested enums
  • nested interfaces

Definizione:
Con il termine nested class (classe annidata) si intende una classe dichiarata all’interno di un’altra classe.
Allo stesso modo si definisono le nested enum e le nested interface.
Ci sono 4 tipi di nested classes:

  1. static member classes, enums e interfaces
  2. non-static member classes
  3. local classes
  4. anonymous classes

Definizione:
Con il termine inner class (classe interna) si indica una qualsiasi nested class purché NON di tipo 1 (vedi definizione precedente).

Facciamo un esempio commentato a dovere:

class Alessandro {              // (1) Top level class
    static class SMC {/*...*/}  // (2) Static member class
    interface SMI {/*...*/}     // (3) Static member interface
    class NSMC {/*...*/}        // (4) Non-static member (inner) class
    void nsm() {
        class NSLC {/*...*/}    // (5) Local (inner) class in non-static context
    }
    static void sm() {
        class SLC {/*...*/}     // (6) Local (inner) class in static context
    }
    SMC nsf = new SMC() {       // (7) Anonymous (inner) class in non-static context
        /*...*/
    };
    static SMI sf = new SMI() { // (8) Anonymous (inner) class in static context
        /*...*/
    };
    enum SME {/*...*/}          // (9) Static member enum
}
  • Share/Bookmark
Tagged with:
preload preload preload

Search engine optimization by SEO Design Solutions