Bonjour à tous,

Les classe internes peuvent être très utiles en programmation java. Je met à votre disposition un petit programme commenté expliquant l'utilisation de ce genre de classes. Si vous avez des comentaires ce sera bien d'enrichir la discussion :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
 
/*
 * Ce programme définit les trois types de classes interieures : 
 * statiques , non statiques et locales.
 * après compilation et execution on obtient : 
 * Une classe interne statique 
 *Une classe interne 
 *Une classe interne locale
 */
public class Outer {
 
	public static void main(String [] args){
		StaticInner inner = new StaticInner();
		new Outer().new Inner();
		/*
		 * deuxieme façon possible d'instanciation de la classe Inner
		 */
		//Outer outer = new Outer();
		//Inner inner = outer.new Inner();
 
		//Classes interieures locales
		final String s = "Une classe interne locale";
		class Local{
			Local(){
				System.out.println(s);
			}
		}
		new Local();
		/*
		 *elles sont définies dans un bloc de code
		 *Elles sont pas liées à une instance d'une classe externe
		 *Ne peuvent accéder qu'aux variables locales ou aux paramètres de méthodes
		 * du bloc de code dans lequel elles sont définies
		 * Ne peuvent accéder qu'à des variables ou des paramètres déclarés comme final 
		 * et qui on reçu une valeur 
		 */
	}
 
	Outer(){
		//new Inner();
	}
	static class StaticInner {
		//pour instancier ce genre de classe il n'y a pas besoin d'avoir une instance de
		// la classe Outer
		StaticInner(){
			System.out.println("Une classe interne statique ");
		}
		StaticInner(String test){
			System.out.println(test);
		}
	}
	/*
	 * Classe interne non statique : création des objets qui sont des instances de la classe
	 * chaque instance est associée à une instance de la classe exterieure dans laquelle
	 * elle est déclarée , ici Outer. l'existece ce Outer est necéssaire à la création d'une instance de Inner. 
	 */
	class Inner{
		// Pour instancier ce type de classes il faut avoir une instance de 
		// la classe Outer.
		Inner(){
			System.out.println("Une classe interne ");
		}
	}
}