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

avec Java Discussion :

Une interface avec héritage


Sujet :

avec Java

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 165
    Points : 76
    Points
    76
    Par défaut Une interface avec héritage
    Bonsoir tout le monde

    J'ai trouvé un exemple un peu bizzare qui me fait poser cette question "Est ce qu'une interface peut hériter d'une classe", un peu à la manière de Runnable et thread, en vous remerciant d'avance

    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
    class Etoile implements Runnable
    {
      public void run()
      {
        for (;;)
        {
          System.out.print('*');
          try
          {
            Thread.sleep(500); //si je comprend bien Thread est issu d'un héritage ?
          }
          catch (java.lang.InterruptedException e)
            {
              System.out.println("Processus interrompu");
            }
        }
      }
    }

  2. #2
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut Bonsoir,
    Dans le code que vous décrivez, je ne vois aucun héritage ?
    Il s'agit là de la création s'une classe qui implémente l'interface Runnable, c'est tout.
    L'héritage concerne le mot clé extends, et non implements.
    implements sert à implémenter une interface dans une classe, et extends sert à étendre une classe, ou une interface en une sous-classe ou sous-interface qui hérite de tout ou partie des méthodes et fields de sa superclasse etc....
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 165
    Points : 76
    Points
    76
    Par défaut
    Merci pour ta réponse, je sais bien qu'implements n'a rien avoir avec extends, ce qui me m'intrigue c'est ça "Thread.sleep(500)", d'où sort cette expression.
    Ma deuxième question est de savoir si une interface peut hériter d'une classe (je sais c'est un peu tiré par les cheveux).
    Merci d'avance

  4. #4
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut D'accord...
    Donc, Non, une interface ne peut pas hériter d'une classe. Elle ne peut hériter que d'une autre interface.
    Pour ce qui concerne Thread.sleep(...), il s'agit là de l'appel à la méthode statique de la classe Thread qui permet d'obtenir que son code cesse toute activité pendant le lapse de temps spécifié en millisecodes comme paramètre.
    Dans le cas du code que vous décrivez, ce dernier va afficher le caractère "*" sur la console de sortie toute les demie-secondes.
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 165
    Points : 76
    Points
    76
    Par défaut
    Merci pour votre réponse (Je ne savais pas que c'étais une méthode statique), ça répond à ma question

  6. #6
    Membre éclairé Avatar de nsanabi
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    Points : 678
    Points
    678
    Par défaut
    si ta question est:
    est ce qu'une classe peut implémenter une interface ?? et bien oui, les interface sont fait pour ça
    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
     
    interface TonInterface{
    //des constantes
    //des méthodes abstraites
    }
    //une classe qui implemente ton interface
    class TaClasse implements TonInterface{
    //
    //
    }
    //une classe qui hérite dune autre classe et implémente ton interface
    class TaClasse extends UneAutreClasse implements TonInterface{
    //
    //
    }
    //une classe qui implémente plusieurs interfaces
    class TaClasse extends UneAutreClasse implements TonInterface1,TonInterface1,TonInterface3{
    //
    //
    }
    sinon une interface ne peut pas hériter d'une classe
    par contre elle peut heriter d'une ou plusieurs autres interfaces (lheritage multiple est autorisé pour les interfaces)
    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
     
    interface MonInterfaceB {
       void f();
    }
     
    interface MonInterface1 extends MonInterfaceB {
       void f1();
    }
     
    interface MonInterface2 extends MonInterfaceB{
       void f2();
    }
     
    interface MonInterface extends MonInterface1, MonInterface2 {
       void fd();
    }
    une interface ne contient que des méthodes abstraites et des constantes, si tu veut hériter d'une autre classe utilise à la place une classe abstraite (un peu semblable) ce n'est pas la même chose, mais cela peut servir.

  7. #7
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 165
    Points : 76
    Points
    76
    Par défaut
    Merci nsanabi, ambiguïté venait du fait que je ne connaissait (je suis débutant) l'origine thread.sleep(x) qui est finalement comme expliqué plus haut une méthode statique.
    Là je comprend mieux

  8. #8
    Membre expérimenté Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Points : 1 540
    Points
    1 540
    Par défaut
    Hors-Sujet :
    Une petite chose me chagrine depuis un bon moment.
    Pourquoi faire un extends d'une interface vers une autre et pas un implements, je m'explique.

    Lors de la création d'une classe générique par exemple, Si je la veux comparable il faudra que je le déclare :
    <T extends Comparable>.

    Mais la classe qui remplacera T lors de l'instanciation devra avoir déclaré :
    ... Implements Comparable.

    Pourquoi avoir utilisé implements et extends alors que l'on pouvait seulement utiliser implements?
    (ça peux porter à confusion un néophyte)
    Autre question : peux t'ont faire "interface1 implements interface2"?

    Peut-être qu'il s'agit d'une question inutile et que c'est juste un choix arbitraire de chez Sun... mais j'aimerais savoir
    Il était une fois [...] Et ils vécurent heureux et eurent beaucoup d'enfants!

  9. #9
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    Citation Envoyé par Ivelios Voir le message
    Lors de la création d'une classe générique par exemple, Si je la veux comparable il faudra que je le déclare :
    <T extends Comparable>.

    Mais la classe qui remplacera T lors de l'instanciation devra avoir déclaré :
    ... Implements Comparable.

    Pourquoi avoir utilisé implements et extends alors que l'on pouvait seulement utiliser implements?
    Ce point a donné lieu a des engueulades homériques lors de la conception des types paramétrés.
    En gros: la sémantique est "<T affectableA UnType>", mais le responsable n'a pas voulu créer un nouveau mot clef qui rende exactement cette sémantique (à mon humble avis un mot-clef n'était pas nécessaire mais passons) donc il a récupéré ce qui passait pour exprimer des contraintes sur les types: "extends" pour affectableA, "super" pour affectableDepuis et "&" pour faire des listes de contraintes.
    Du coup on a des trucs du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <T extends Machin & Chosable>
    Dans lequel seul Chosable est garanti d'être une interface.
    (bref: la syntaxe des types paramétrés est malheureuse -et encore j'emploie un euphémisme car nous sommes sur un forum public -)

    Nota: dans ton exemple c'est plus probablement <T extends Comparable<T>> ou <T extends Comparable<? super T>>
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  10. #10
    Membre éclairé Avatar de nsanabi
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    Points : 678
    Points
    678
    Par défaut
    Citation Envoyé par Ivelios Voir le message
    Autre question : peux t'ont faire "interface1 implements interface2"?
    NON, une interface hérite d'une autre (voire plusieurs)

    Lors de la création d'une classe générique par exemple, Si je la veux comparable il faudra que je le déclare :
    <T extends Comparable>.
    Mais la classe qui remplacera T lors de l'instanciation devra avoir déclaré :
    ... Implements Comparable.
    tu peut voir ici pourquoi

  11. #11
    Membre expérimenté Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Points : 1 540
    Points
    1 540
    Par défaut
    Ok, c'est plus clair maintenant, merci pour vos réponses

    ps : abdelilah, désolé d'avoir utilisé ton post
    Il était une fois [...] Et ils vécurent heureux et eurent beaucoup d'enfants!

  12. #12
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 165
    Points : 76
    Points
    76
    Par défaut
    Ps : Ivelios, je suis ravi que mon poste ai servi à aider quelqu'un

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

Discussions similaires

  1. [POO] réaliser une 'interface' avec PHP4
    Par TabrisLeFol dans le forum Langage
    Réponses: 3
    Dernier message: 27/12/2008, 21h00
  2. Une interface avec Delphi
    Par akilam84 dans le forum Débuter
    Réponses: 3
    Dernier message: 17/08/2008, 12h25
  3. Exécuter une interface avec Matlab 5.3
    Par chaterbache dans le forum Interfaces Graphiques
    Réponses: 4
    Dernier message: 02/01/2008, 07h08
  4. Piloter une interface avec des relais
    Par Yepazix dans le forum API, COM et SDKs
    Réponses: 13
    Dernier message: 26/10/2004, 19h46

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