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 :

[Débutant] Syntaxe du langage


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 209
    Par défaut [Débutant] Syntaxe du langage
    Bonjour
    Je trouve dans un exemple de Sun la syntaxe suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            JPanel leftHalf = new JPanel() {
                //Pour ne pas permettre d'allonger ce panneau verticalement.
                public Dimension getMaximumSize() {
                    Dimension pref = getPreferredSize();
                    return new Dimension(Integer.MAX_VALUE,
                                         pref.height);
                }
            };
    je comprend la méthode getMaximumSize() est redéfinie mais comment expliquer la façon de coder :
    Aprés avoir placée l'instructiion new JPanel () les deux {}; encadre la redéfinition de la méthode je ne comprend pas cette façon de faire
    si quelqu'un peut m'expliquer le pourqoi de la chose merci d'avance
    A+

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Janvier 2006
    Messages : 365
    Par défaut
    Pour comprendre cette syntaxe, il te faut lire à propos des classes internes et la section concernant les classes anonymes. En principe n'importe quel doc ou bouquin sur les fondamentaux du langage Java devrait faire l'affaire. C'est pas très compliqué.
    Bon courage

  3. #3
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Pour faire simple, c'est en gros un "héritage à la volée"... Tu redéfinies certaines méthodes directement à la création de l'objet...

  4. #4
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Citation Envoyé par ®om
    Pour faire simple, c'est en gros un "héritage à la volée"... Tu redéfinies certaines méthodes directement à la création de l'objet...
    Soit mais, pour comprendre cette notation il faut faire le parallèle avec l'héritage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    JPanel leftHalf = new JPanel() {
      //Pour ne pas permettre d'allonger ce panneau verticalement.
      public Dimension getMaximumSize() {
        Dimension pref = getPreferredSize();
        return new Dimension(Integer.MAX_VALUE, pref.height);
      }
    };
    L'écriture ci-dessus est presque équivalente à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    private class MyJpanel estends JPanel {
      public Dimension getMaximumSize() {
        Dimension pref = getPreferredSize();
        return new Dimension(Integer.MAX_VALUE, pref.height);
      }
    }
    [..]
    MyJapel leftHalf = new MyJapel ();
    J'ai mis presque parceque le premier cas on dit que c'est une classe anonyme et dans le second cas non.

    Une classe anonyme n'a donc pas de nom et elle est du type de la classe qu'elle redéfinit Jpanel (essaie avec insatcneof), par contre dans le second cas la classe est du type JPanel (bien entendu) mais aussi MyJPanel. Une classe anonyme est donc local à une méthode.

    Tu peux manipuler une classe anonyme comme tout autre classe.

    En fait une classe anonyme est à utiliser dans le cas où tu as besoin localement de redéfinir les fonctionnalités d'une classe où de définir les fonctionnalités d'une interface (pour la gestion des événement par les listeners notamment).

    A+

  5. #5
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par thibaut
    Une classe anonyme n'a donc pas de nom et elle est du type de la classe qu'elle redéfinit Jpanel (essaie avec insatcneof), par contre dans le second cas la classe est du type JPanel (bien entendu) mais aussi MyJPanel. Une classe anonyme est donc local à une méthode.
    Certes, mais forcément le instanceof ne signifie pas que c'est le type réel... En l'occurence, le type réel d'une classe anonyme est NomClasse$1 (ou $2, $3...).

    Essaye ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(new Object() {}.getClass().getName());

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. syntaxe de langage
    Par amelamelou dans le forum VBA Access
    Réponses: 4
    Dernier message: 10/06/2011, 16h11
  2. [langage] [expression reguliere] : syntaxe
    Par arcane dans le forum Langage
    Réponses: 8
    Dernier message: 25/09/2003, 13h03

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