Nel linguaggio di programmazione Java, quando una classe èdefinita all'interno di un'altra classe, tale classe viene chiamata classe nidificata o classe interna. Le classi nidificate sono una caratteristica unica di Java inclusa da jdk1.1. Ricorda sempre, questa funzionalità di nidificazione è una relazione solo tra classi, non tra oggetti Java. In precedenza abbiamo parlato di come istanziare una variabile di istanza in Java e ora daremo un'occhiata a come istanziare una classe interna in Java.
Come creare un'istanza di una classe interna - Classe nidificata in Java
- Tipi di classi nidificate
- Non statico
- Statico
- Modificatori di accesso per classi annidate o interne
- Caratteristiche della classe nidificata
- vantaggi
- Codice di esempio, spiegazione di codice e output
Tipi di classi nidificate in Java
Classe nidificata non statica
Le classi nidificate non statiche sono chiamate classi interne. Ha accesso a tutti i dati dell'istanza della classe che lo racchiude, inclusi campi e metodi privati.
Sintassi
[modifiers] class OuterClassName { code... [modifiers] class InnerClassName { code.... } }
Creazione
<OuterClassName> outerObj = new <OuterClassName>(arguments); <OuterClassName>.<InnerClassName> innerObj = outerObj.new <InnerClassName> (arguments);
Proprietà
- La classe esterna (la classe contenente la classe interna) può creare un'istanza del numero di oggetti della classe interna che desidera, all'interno del suo codice.
- Se la classe interna è pubblica e anche la classe contenente, allora il codice in qualche altra classe non correlata può anche creare un'istanza della classe interna.
- Nessun oggetto di classe interno viene istanziato automaticamente con un oggetto di classe esterno.
- Il codice di classe interno ha libero accesso a tuttielementi dell'oggetto classe esterna che lo contiene, per nome (indipendentemente dal livello di accesso degli elementi), se la classe interna ha una variabile con lo stesso nome, è possibile accedere alla variabile della classe esterna in questo modo:
<NomeClasseEsterna> .questo. <VariableName> - La classe esterna può chiamare anche i metodi privati della classe interna.
- L'oggetto classe interna deve essere associato a un'istanza della classe esterna.
Classe nidificata statica
Le classi nidificate dichiarate statiche sono chiamate semplicemente classi nidificate statiche. Una classe statica non ha accesso a dati specifici dell'istanza.
Sintassi
<access-specifier> class OuterClassName { public static class <StaticInnerClassName> { code. . . } code . . . }
Creazione
<OuterClassName>.<InnerClassName> innerObj = new <OuterClassName>.<InnerClassName>(arguments);
Proprietà
- Per la classe interna statica, la classe interna statica può essere istanziata senza un'istanza di classe esterna.
- I membri statici della classe esterna sono visibili alla classe interna statica, qualunque sia il loro livello di accesso.
- I membri non statici della classe esterna non sono disponibili, poiché non esiste un'istanza della classe esterna.
- Una classe interna non può avere membri statici a meno che la classe interna non sia essa stessa contrassegnata come statica.
- A volte le classi nidificate statiche non vengono affatto definite come classe interna, in quanto non richiedono l'istanza della classe esterna.
- Una classe interna statica è come qualsiasi altra classe interna, ma non ha il riferimento al suo oggetto classe esterno che l'ha generata.
Modificatori di accesso per classi annidate o interne
- pubblico
- protetta
- privato
- predefinito
Caratteristiche della classe nidificata
Un oggetto di una classe interna ha un implicitoriferimento all'oggetto classe esterno che lo ha istanziato. Attraverso questo puntatore, ottiene l'accesso a qualsiasi variabile dell'oggetto esterno. Solo le classi interne statiche non hanno questo puntatore ma possono accedere a tutti i membri statici solo usando il nome della classe esterna. In realtà è invisibile quando scriviamo il codice, ma il compilatore se ne occupa. Le classi interne sono in realtà un fenomeno del compilatore e non della JVM. Questa funzione rende le classi interne Java più ricche e utili.
Vantaggi della classe nidificata
- È un modo per raggruppare logicamente le classi utilizzate solo in un posto.
- Aumenta l'incapsulamento.
- Le classi nidificate possono portare a codice più leggibile e gestibile.
- Raggruppamento logico di classi - Se una classe èutile solo a un'altra classe, quindi è logico incorporarlo in quella classe e tenere uniti i due. La nidificazione come "classi di supporto" rende il loro pacchetto più snello.
- Incapsulamento aumentato: considerare due livelli principaliclassi, A e B, dove B necessita dell'accesso ai membri di A che altrimenti sarebbero dichiarati privati. Nascondendo la classe B all'interno della classe A, i membri di A possono essere privati, ma B può accedervi. Inoltre, B stesso può essere nascosto dal mondo esterno.
Programma 1
/* within the scope of outer class */ class Outer{ int var1 = 2; int var2 = 3; /* Inner Class */ class Inner{ void add(){ System.out.println("Addition is:"+(var1+var2)); } } void show(){ Inner in = new Inner(); in.add(); } } class NestedClassDemo{ public static void main(String args[]){ Outer out = new Outer(); out.show(); } }
Uscita 1
Programma 2
/* Outside the scope of outer class */ class Outer{ int var1 = 2; int var2 = 3; /* Inner Class */ class Inner{ void add(){ System.out.println("Addition is:"+(var1+var2)); } } } class NestedClassDemo1{ public static void main(String args[]){ Outer.Inner in = new Outer().new Inner(); in.add(); } }
Uscita 2
Spiegazione di codice e output
Nel primo programma, abbiamo istanziato la classe nidificata Inner in un metodo dichiarato all'interno della classe Outer, ad es.
nell'ambito della classe esterna. Istanzeremo appositamente le classi interne nell'ambito della classe esterna. La classe interna è Privata poiché sappiamo che i membri privati non saranno accessibili al di fuori dell'ambito di quella classe che contiene membri privati.
Nel secondo programma, abbiamo istanziato la classe nidificata Inner al di fuori dell'ambito della classe Outer. La sintassi sembra essere difficile, ma non è così. È troppo facile:
Spezzeremo questa affermazione in due:
Outer out = new Outer(); Outer.Inner in = out.new Inner();
Innanzitutto, dobbiamo creare un oggetto per l'esternoclasse. Quindi creeremo un oggetto per la classe interna poiché la classe interna è il membro della classe esterna, quindi dobbiamo riconoscere la classe interna in modo univoco, può essere fatto con Esterno. Interno quindi dobbiamo creare l'oggetto che viene eseguito da un nuovo operatore seguito dal costruttore di quella particolare classe. La stessa cosa è fatta qui.
Flash acceso
Dopo aver compilato la classe nidificata, verranno generati due file .class con Outer.class e Outer $ Inner.class (qui la classe Inner è all'interno della classe Outer).
Scopri tutorial più utili e linee guida definitive sulla programmazione Java.
Commenti