Inner Class Java

Una classe interna (inner class) è una classe dichiarata all’interno di un’altra classe.

Esempio:

public class Esterna {
	private int x;
	
 	public class Interna {
 		private int y;
 		public void metodoInterno(){

 			
 		}
	 }
}

Per creare un’istanza della classe interna, se non dichiarata static, bisogna avere un’istanza della classe esterna.  La creazione può avvenire nei seguenti modi, tutti equivalenti:

Esempio

			Esterna a = new Esterna();
			Esterna.Interna jk3 = a. new Interna();
			Interna jk4 = a. new Interna();
			Interna jk5 = new Esterna(). new Interna();

Una inner class ha accesso ai field ed ai metodi dell’ospite, tramite l’istruzione

         <nome_classe_contenitore>.this.

Esempio

			Esterna.this.x = 40;

La classe inner può anche essere dichiarata statica. In questo caso, può essere considerata equivalente ad una classe normale che solo per motivi stilistici o di comodità è stata definita all’interno di un’altra classe.

Esempio

public class Esterna {
	private int x;
	
 	
 	public static class InternaStatica {
 		private int y;
 		public void metodoInterno(){
 			//...
 		}

	 }
}	

E’  possibile, inoltre, creare un’istanza della inner class statica senza creare la classe esterna in uno dei seguenti modi, tutti equivalenti:

Esempio

		Esterna.InternaStatica j  = new InternaStatica();
		InternaStatica r = new Esterna.InternaStatica();

Esempio Completo

public class Esterna {
	private int x;
	
 	public class Interna {
 		private int y;
 		public void metodoInterno(){
 			Esterna.this.x = 40;
 			
 		}
	 }

 	
 	public static class InternaStatica {
 		private int y;
 		public void metodoInterno(){
 			//...
 		}
 		public static void metodoInternoDue(){
 			//...
 		}
	 }
 	
 	public static void main(String[] args) {
 		
 			Esterna a = new Esterna();
 			
 			Interna l = new Esterna().new Interna();
 			InternaStatica r = new Esterna.InternaStatica();
 			
 			r.metodoInterno();
 			Esterna.InternaStatica.metodoInternoDue();
 		
 	}
}
(Visited 10 times, 1 visits today)

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *