Che cos'è Inner Class in Java?

Pubblicato: 2022-04-29

Il concetto di classe interna in Java è fondamentale per la programmazione Java. In Java, una classe nidificata e una classe interna sono due idee di progettazione delle classi molto simili ma leggermente distinte e spesso vanno di pari passo.

Una classe nidificata è definita all'interno di un'altra classe e ha due tipi: classe nidificata statica e classe nidificata non statica. D'altra parte, una classe interna è un tipo di classe nidificata non statica ed è composta da tre tipi: classe interna membro, classe interna anonima e classe interna locale.

Quindi, cosa significano questi tre tipi di classi interiori e qual è il loro uso? Continua a leggere per scoprirlo in questa guida dettagliata sulla classe interna di Java.

Sommario

Che cosa è Inner Class in Java

Una classe nidificata non statica o una classe interna è definita all'interno di un'altra classe e ha accesso ai membri della classe esterna (classe di inclusione). Al contrario, una classe nidificata statica è anche una classe definita all'interno di un'altra classe, ma a differenza di una classe nidificata non statica, non può accedere alle variabili membro della sua classe esterna. Nel caso di una classe nidificata non statica, non è necessario creare un'istanza della classe esterna. Ma nel caso di una classe interna, dobbiamo prima istanziare la classe esterna per poter istanziare la classe interna.

Fonte

Tipi di classe interna in Java

In Java, le classi interne sono dei seguenti tre tipi:

  • Classe interna dei membri
  • Classe interna anonima
  • Classe interna locale

Ora, cerchiamo di capire ogni tipo di classe interiore con esempi.

1. Classe interna dei membri

Una classe interna del membro in Java è una classe nidificata non statica creata all'interno di una classe ma all'esterno di un metodo. Indicata anche come una normale classe interna, una classe interna del membro può essere dichiarata con modificatori di accesso come private, public, default e protected.

La sintassi per una classe interna del membro è la seguente:

classe Esterno{

//codice

classe interna{

//codice

}

}

Classe interna del membro nell'esempio Java:

Di seguito è riportato un programma per dimostrare come creare una classe interna e accedervi. Renderemo privata la classe interna e useremo il metodo display_Inner() per accedere alla classe.

classe DemoOuter {

numero int;

// classe interna

classe privata DemoInner {

stampa vuota pubblica() {

System.out.println(“Questa è la classe interna”);

}

}

// Accesso alla classe interna dal metodo all'interno

void display_Inner() {

DemoInner inner = new DemoInner();

stampa.interna();

}

}

classe pubblica MyClass {

public static void main(String args[]) {

// Istanziazione della classe esterna

DemoOuter esterno = nuovo DemoOuter();

// Accesso al metodo display_Inner()

esterno.display_interno();

}

}

Output: questa è la classe interna

Nell'esempio sopra, OuterDemo è la classe esterna, InnerDemo è la classe interna, stiamo istanziando la classe interna all'interno del metodo display_Inner(), che viene invocato dal metodo principale.

Esplora i nostri corsi di ingegneria del software popolari

SL. No Programmi di sviluppo software
1 Master of Science in Informatica presso LJMU e IIITB Programma di certificazione di sicurezza informatica Caltech CME
2 Bootcamp di sviluppo full stack Programma PG in Blockchain
3 Executive Post Graduate Program in Software Development - Specializzazione in DevOps Visualizza tutti i corsi di ingegneria del software

2. Classe interna anonima

Una classe interna anonima in Java è una classe interna dichiarata senza alcun nome di classe e per la quale viene creato un solo oggetto. Le classi interne anonime in Java vengono dichiarate e istanziate allo stesso tempo. Sono molto utili quando vogliamo sovrascrivere il metodo di una classe o di un'interfaccia.

La sintassi per una classe interna anonima in Java è la seguente:

AnonymousInner an_inner = nuovo AnonymousInner() {

vuoto pubblico mio_metodo() {

//codice

}

};

Una classe interna anonima in Java può essere creata in due modi:

  1. Usando la classe
  2. Usando l'interfaccia

Classe interna anonima nell'esempio Java (usando la classe):

classe astratta Pasto{

abstract void eat();

}

classe TestAnonymousInner{

public static void main(String args[]){

Pasto m=nuovo Pasto(){

void eat(){System.out.println("Buon appetito!");}

};

la carne();

}

}

Uscita: Buon appetito!

Classe interna anonima nell'esempio Java (usando l'interfaccia):

interfaccia Gioco{

gioco vuoto();

}

classe TestAnnonymousInner1{

public static void main(String args[]){

Gioco g=nuovo gioco(){

public void play(){System.out.println("Giochi all'aperto");}

};

g.play();

}

}

Uscita: giochi all'aperto

3. Classe interna locale

Una classe interna locale in Java è una classe creata all'interno di un metodo. Come nel caso delle variabili locali, l'ambito della classe interna locale rimane limitato all'interno del metodo.

Le classi interne locali sono definite all'interno di un blocco: un corpo del metodo, una clausola if o un ciclo for. Una classe interna locale non è un membro di alcuna classe che la racchiude, ma appartiene invece al blocco all'interno del quale è definita. Pertanto, anche se una classe interna locale in Java non può avere alcun modificatore di accesso ad essa associato, puoi contrassegnarla come astratta o finale. Se vogliamo invocare i metodi di una classe interna locale, dobbiamo istanziare la classe all'interno del metodo.

Classe interna locale nell'esempio Java:

Di seguito è riportato un programma di esempio per dimostrare come istanziare l'oggetto di una classe interna locale dichiarata all'interno del metodo di una classe esterna.

pacchetto innerClass;

classe pubblica Outer_Class

{

// Un metodo di istanza della classe Outer_Class.

visualizzazione vuota pubblica()

{

// Dichiarazione di una classe interna locale del metodo.

classe Inner_Class

{

messaggio vuoto pubblico(){

System.out.println(“Questa è una classe interna locale!”);

}

}

// Crea un'istanza di una classe interna locale del metodo e chiama il metodo msg() utilizzando la variabile di riferimento dell'oggetto i.

Inner_Class i = new Inner_Class();

i.msg();

}

public static void main(String[] args)

{

// Crea un oggetto della classe esterna Outer_Class.

Outer_Class o = new Outer_Class();

o.display();

}

}

Output: Questa è una classe interna locale!

Tenendo a mente i fondamenti della classe interna di Java, capiamo perché ne abbiamo bisogno in primo luogo.

Vantaggi di Java Inner Class

Una classe interna in Java porta in tavola tre utilità significative. Questi sono i seguenti:

1. Poiché una classe interna Java può accedere ai membri dati e ai metodi della classe esterna/principale, incluso private, rappresenta un tipo specifico di relazione.

2. Una classe interna Java riduce significativamente la codifica poiché richiede meno per scrivere.

3. Una classe interna in Java raggruppa logicamente classi e interfacce in un'unica posizione, migliorando così la leggibilità del codice e facilitandone la manutenzione.

Riassumendo

Il concetto di classi nidificate semplifica e aggiunge flessibilità alla creazione di classi ovunque nella programmazione Java. A questo proposito, una classe annidata non statica nota come classe interna è particolarmente utile, come abbiamo già visto nella nostra discussione finora.

Vorremmo concludere affermando due casi in cui l'uso della classe interna sembra più appropriato. Innanzitutto, una classe interna Java è l'ideale quando due classi hanno una stretta relazione e non sono accessibili da nessun'altra classe. E in secondo luogo, le classi interne sono comuni nella gestione degli eventi di programmazione della GUI Java. Pertanto, le classi interne Java possono essere utilizzate in modo sicuro quando sono coinvolti listener e i loro componenti della GUI.

Ti chiedi dove imparare Java?

Certificazione PG collegata al lavoro di upGrad in ingegneria del software è quello che stai cercando!

Appositamente progettata per neolaureati e ultimi anni, la certificazione PG collegata al lavoro di upGrad in Ingegneria del software è perfetta per coloro che vogliono imparare a programmare e ottenere posti in ruoli software di livello base. Questo programma online di 5 mesi insegnerà le migliori competenze software come Java, JavaScript, HTML5, DSA, AWS, MERN e altro!

Punti salienti del programma:

  • Specializzazione in MERN Stack/Cloud-Native
  • Oltre 500 ore di apprendimento online
  • Oltre 350 ore di formazione pratica
  • Oltre 50 sessioni dal vivo
  • Cinque progetti di settore
  • Networking con esperti del settore
  • Forum di domande e risposte con colleghi ed esperti del settore
  • Supporto all'apprendimento da parte di assistenti didattici e mentori del settore

Iscriviti oggi per imparare dai migliori del settore!

Qual è la differenza tra classe interna e sottoclasse?

Una classe interna è una classe nidificata o definita all'interno di un'altra classe. D'altra parte, una sottoclasse è una classe derivata da un'altra classe. Inoltre, mentre è possibile accedere a una classe interna solo utilizzando il riferimento della classe esterna all'interno della quale è nidificata, è possibile accedere direttamente a una sottoclasse a meno che la sottoclasse non abbia ereditato variabili private.

Possiamo scrivere una classe all'interno di una classe in Java?

Sì, possiamo definire una classe all'interno di un'altra classe in Java. Tale classe è nota come classe nidificata e ci consente di organizzare logicamente le classi in un unico posto, creando così un codice più gestibile e leggibile. Come parte della sua classe di inclusione, una classe nidificata può essere dichiarata pubblica, privata, privata del pacchetto o protetta.

La classe interna Java può essere privata?

Sì, una classe interna Java può essere privata. Ma una volta che una classe interna è dichiarata privata, non è possibile accedervi da un oggetto esterno alla classe. Le classi interne ed esterne hanno accesso alle variabili di istanza private e ai metodi privati ​​dell'altro. Finché siamo all'interno della classe esterna o interna, i modificatori private e public hanno lo stesso effetto.