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 :

Runnable est un Interface et pourquoi on fait : new Runnable ?


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 16
    Par défaut Runnable est un Interface et pourquoi on fait : new Runnable ?
    On dit qu'on ne peut pas instancier les Interface (les classes abstraites en générale). Pourquoi alors on écrit ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    new Thread(new Runnable() {
          public void run() {
            ........
            ........
          }
      }).start()
    new Runnable()
    ne signifie t'il pas instancier Runnable ?

  2. #2
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Non, on n'instancie pas l'interface.

    on définit une classe qui implémente Runnable, et dont l'implémentation est fournie à la suite. C'est une classe anonyme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    new Thread(new Runnable() {
          public void run() {
            ........
            ........
          }
      }).start()
    la partie en gras est l'implémentation de Runnable.

  3. #3
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 16
    Par défaut
    Et quand on fait comme ça ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Runnable code = new Runnable() {
        public void run() {
          ........
        }
      };
    On n'instancie pas ? J'arrive pas à comprendre bien.

  4. #4
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    on instancie, mais pas une interface. On définit une nouvelle classe, anonyme (anonyme signifie qu'on ne lui donne pas de nom, et que son implémentation suit immédiatement sa déclaration), mais qui implémente Runnable. On a donc une classe concrète, qui implémente Runnable, et qui est instanciée directement. Cette notation est pratiquement égale, à quelques subtilités prêt, à celle là:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class X implements Runnable {
        public void run() {}
    }
    Recherche des cours qui parlent de "classe anonyme" si tu ne comprend toujours pas.


  5. #5
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    On appelle ça une classe anonyme. En fait, avec ça, tu crée une nouvelle classe et tu l'instancies automatiquement.

    C'est comme si tu faisais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class MyRunnable implements Runnable {
        public void run() {
          ........
        }
     };
     
    Runnable runnable = new MyRunnable();

  6. #6
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 16
    Par défaut
    Ok, merci pour vos contribution je vais regarder un cours sur les classes anonymes.

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    accessoirement les classes anonymes ne sont pas limité a l'implémentation d'une interface, on aurait pu remplacer Runnable par un classe abstraite ou une classe concrète existante qu'on étendrais alors de manière anonyme, comme dans ce code.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Action monAction = new AbstractAction() {
        /// implementation des méthodes abstraites ;)
    };

  8. #8
    Membre averti
    Profil pro
    Devellopement
    Inscrit en
    Juin 2004
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Devellopement

    Informations forums :
    Inscription : Juin 2004
    Messages : 22
    Par défaut
    Citation Envoyé par colonnel Voir le message
    Et quand on fait comme ça ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Runnable code = new Runnable() {
        public void run() {
          ........
        }
      };
    On n'instancie pas ? J'arrive pas à comprendre bien.
    Dans ce cas on définit une classe interne anonyme, cela revient au code "équivalent" suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class ClasseNonAnonyme implements Runnable {
       public void run() {
          ........
        }
    }
     
    Runnable code = new ClasseNonAnonyme();

Discussions similaires

  1. [AJAX] Le trie ne se fait pas
    Par morpheus007 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 25/06/2007, 11h02
  2. Réponses: 11
    Dernier message: 13/07/2006, 10h08
  3. le vrai probleme c'est l'interface....hé oui!!!!!!
    Par redhammd dans le forum Bases de données
    Réponses: 3
    Dernier message: 07/12/2005, 21h31

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