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 ");
		}
	}
} | 
Partager