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 :

[Language] Explications classe définie dans une classe


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2004
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 306
    Par défaut [Language] Explications classe définie dans une classe
    Bonjour,

    j'apprends actuellement à utiliser le composant JTable en lisant le tutoriel de sun, l'un des codes présentés est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class TableDemo extends JPanel {
        private boolean DEBUG = false;
     
        public TableDemo() {
    ...
        }
     
        class MyTableModel extends AbstractTableModel {
    .....
        }
    ....
    }
    Je ne comprends pas comment une classe peut-etre définie dans une autre classe ? Je pensais qu'on ne pouvait y définir que des propriétés et des méthodes.
    Mais comment utiliser ensuite la classe MyTableModel à partir de l'instance de la classe TableDemo ?

    Merci pour vos réponses.
    Ciao

  2. #2
    Membre éclairé
    Inscrit en
    Mars 2005
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 50
    Par défaut
    Oui, il y a les class anonyme etc

    ok a+

  3. #3
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut Re: [DEBUTANT] Explications classe définie dans une classe
    Salut,

    Citation Envoyé par etiennegaloup
    Je ne comprends pas comment une classe peut-etre définie dans une autre classe ? Je pensais qu'on ne pouvait y définir que des propriétés et des méthodes.
    Non tu peux très bien définir une nouvelle classe dans une autre classe : on appelle cela une inner-class (ou classe interne).
    Elle a plusieurs avantages :
    • Elle a accès à tous les éléments de la classe conteneur (même les éléments privés).
      Elle conserve une référence vers la classe conteneur (dans l'exemple, on peut utiliser TableDemo.this dans les méthodes de MyTableModel pour avoit la référence de l'instance de TableDemo associé).
      Elle peut être très restrictive (protected et private)


    Citation Envoyé par etiennegaloup
    Mais comment utiliser ensuite la classe MyTableModel à partir de l'instance de la classe TableDemo ?
    Tout simplement comme n'importe quelle autre classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyTableModel model = new MyTableModel();

    Dans le même ordre d'idée, tu as les classes annonymes qui permettent de créer des classes dans une méthodes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		button.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent pE) {
    				// ...
    			}
    		});
    A noter que les classes internes peuvent être static, dans ce cas cela signifie que la classe n'est plus associé à la classe conteneur (elle est totalement indépendante comme n'importe quel autre classe).

    a++

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 109
    Par défaut
    [edit : posté en même temps que le message précédent]

    Il s'agit d'une classe interne. Tu as 4 types de classes internes :
    * classe interne définie comme membre statique
    * classe interne définie comme membre
    * classe locale
    * classe anonyme

    Chaque type possède des spécificités que je te laisse rechercher. Néanmoins, dans la classe qui la définit, la classe interne s'instancie comme une classe "normale". L'un des intérêts est qu'une classe interne définie comme membre peut accéder aux attributs privés de sa classe externe et réciproquement.

  5. #5
    Membre éclairé
    Inscrit en
    Juillet 2004
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 306
    Par défaut
    Ok,

    merci pour toutes vos réponses, je vais aller me documenter dans le livre de Bruce Eckel, notamment, pour approfondir la chose.

    Dans le tutoriel, il y avait aussi ceci, mais qu'est-ce que c'est que cette définition avec l'opérateur new.

    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
    new AbstractTableModel() {
        public String getColumnName(int col) {
            return columnNames[col].toString();
        }
        public int getRowCount() { return rowData.length; }
        public int getColumnCount() { return columnNames.length; }
        public Object getValueAt(int row, int col) {
            return rowData[row][col];
        }
        public boolean isCellEditable(int row, int col)
            { return true; }
        public void setValueAt(Object value, int row, int col) {
            rowData[row][col] = value;
            fireTableCellUpdated(row, col);
        }
    }
    Ca ressemble un p'tit peu à ce qu'AdiGuba m'a écrit.

    Citation Envoyé par AdiGuba
    button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent pE) {
    // ...
    }
    });
    Ciao

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 109
    Par défaut
    Il s'agit en effet de l'instanciation d'une classe anonyme qui étend AbstractTableModel

  7. #7
    Membre éclairé
    Inscrit en
    Juillet 2004
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 306
    Par défaut
    Ok merci bien pour toutes vos infos

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 26/03/2013, 13h07
  2. Réponses: 0
    Dernier message: 22/04/2010, 10h41
  3. [PHP 5.0] instancier une classe avec son nom dans une variable
    Par Nnay_ dans le forum Langage
    Réponses: 1
    Dernier message: 12/02/2009, 12h49
  4. [Applet]utiliser une classe d'un package dans une applet
    Par jeromejanson dans le forum Applets
    Réponses: 1
    Dernier message: 30/06/2005, 08h13
  5. Réponses: 2
    Dernier message: 27/03/2005, 16h09

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