IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

un petit memo pour les inner classes


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 68
    Par défaut un petit memo pour les inner classes
    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 ");
    		}
    	}
    }

  2. #2
    Membre émérite
    Avatar de divxdede
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 525
    Par défaut
    On peut vouloir référencer explicitement la classe englobante au sein d'une inner classe (non statique) pour lever des ambiguités de nommage.

    On peut ainsi referencer le "this" de la classe englobante comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    /*
    	 * 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 ");
                            System.out.println("Mon Outer à moi =" + Outer.this );
    		}
    	}
    De plus je tiens à mettre en garde les inner-classes non statiques qui se retrouve par Serializable. Car leur serialization embarque de-facto leur classe englobante.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 68
    Par défaut
    Le probleme c'est que avec une telle implémentation on obtient une réfèrence de la classe en memoire et non pas de valeur voici ce qu'on obtient après execution de ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Une  classe interne 
    Mon Outer à moi =certf1.Outer@360be0

Discussions similaires

  1. [CSS] Petits conseils pour les redimensionnements
    Par GLDavid dans le forum Mise en page CSS
    Réponses: 10
    Dernier message: 07/08/2006, 17h44
  2. J'ai un petit probleme pour les if et else
    Par Nadirov dans le forum Delphi
    Réponses: 9
    Dernier message: 02/08/2006, 13h58
  3. Petit sondage pour les cplusplusiens
    Par Float* dans le forum C++
    Réponses: 26
    Dernier message: 28/03/2006, 10h24
  4. petit conseil pour les index
    Par fpouget dans le forum Langage SQL
    Réponses: 11
    Dernier message: 10/12/2005, 04h39
  5. Une petite aide pour les API ?
    Par Yop dans le forum Windows
    Réponses: 2
    Dernier message: 04/04/2002, 21h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo