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 :

Héritage et interfaces


Sujet :

Langage Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 61
    Points : 34
    Points
    34
    Par défaut Héritage et interfaces
    Bonjour,

    J'ai une variable de type "org.w3c.dom.NodeList" (une interface) sur laquelle j'aimerais appeler une méthode personnelle (appelons-la "toto").

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    NodeList children = ((Node)parentElement).getChildNodes();
    children.toto();
    Mon 1er réflexe fut d'étendre NodeList via une classe MyNodeList dans laquelle j'implémenterais "toto".

    Malheureusement, je ne peux pas étendre NodeList vu que c'est une interface. Comment faire cela proprement ?

    Je pourrais le faire via une méthode statique à laquelle je passerais la NodeList mais ce n'est pas top...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    NodeList children = ((Node)parentElement).getChildNodes();
    Toto.toto(children);
    Merci d'avance pour votre aide,

  2. #2
    Membre chevronné Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Points : 2 232
    Points
    2 232
    Par défaut
    Tu pourrais faire une interface MyNodeListInterface qui implémenterais NodeList et ensuite une classe MyNodeList qui implémentera ta nouvelle interface.

    EDIT : Tu n'a même pas besoin de faire une nouvelle interface tu peux directement implémenter NodeList avec MyNodeList
    autant l'hiver éclate que l'hétéroclite
    le vrai geek c'est celui qui croit qu'il y a 1024 mètres dans un kilomètre

  3. #3
    Membre actif Avatar de ploxien
    Inscrit en
    Février 2006
    Messages
    467
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2006
    Messages : 467
    Points : 221
    Points
    221
    Par défaut
    Oui je pense que tu as essayé extends et que ca jouait pas... Mais avec implement ca devrait mieux aller!

    Redis-nous.

    A+
    (\ _ /)
    (='.'=)
    (")-(")
    Deux règles du succès:
    1) Ne communiquez jamais à quelqu'un tout votre savoir...

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 61
    Points : 34
    Points
    34
    Par défaut
    En effet, j'ai bien tenté ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public class MyNodeList implements NodeList
    ...mais le problème est que je dois alors réimplémenter les autres méthodes de l'interface NodeList et ça, ce n'est pas du tout intéressant :-(

    Fabrice

  5. #5
    Membre actif Avatar de ploxien
    Inscrit en
    Février 2006
    Messages
    467
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2006
    Messages : 467
    Points : 221
    Points
    221
    Par défaut
    Je ne suis pas sur, mais il me semble que tu peux les réimplémenter et mettre uniquement super(); dans chaque fonction... Ou je suis dans l'erreur?
    (\ _ /)
    (='.'=)
    (")-(")
    Deux règles du succès:
    1) Ne communiquez jamais à quelqu'un tout votre savoir...

  6. #6
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Tu as deux solutions :

    1. Créer une classe abstraite qui n'implémente que ta méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public abstract class MyNodeList implements NodeList {
    	public void toto() {
    		// ... code
    	}
    }
    2. Tu peux étendre une interface (c'est tout à fait possible) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public interface MyNodeList extends NodeList {
    	public void toto();
    }

    Mais j'aimerais bien connaitre le pourquoi de cela... ca me parait un peu bizarre dans ce cas précis (tu ne devrais pas te soucier de l'implémentation de NodeList normalement).

    a++

  7. #7
    Membre averti Avatar de Rayndell
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 289
    Points : 323
    Points
    323
    Par défaut
    Si tu as besoin d'autres méthodes de NodeList à part toto, il faut effectivement les réimplémenter. Mais si tu en as besoin, c'est certainement qu'il existe une classe implémentant déjà ces méthodes. Trouve-la et faire hériter ta classe de cette classe.
    "Et tu comprendras pourquoi mon nom est l'Eternel, quand sur toi s'abattra la colère du Tout-puissant."

  8. #8
    Membre actif Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Points : 294
    Points
    294
    Par défaut
    Citation Envoyé par fabrisss
    En effet, j'ai bien tenté ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public class MyNodeList implements NodeList
    ...mais le problème est que je dois alors réimplémenter les autres méthodes de l'interface NodeList et ça, ce n'est pas du tout intéressant :-(

    Fabrice
    Conceptuellement parlant, une interface te fournit des services auxquels tu 'abonnes' ta classe qui l'implémente. Donc, normalement, tu es censé avoir besoin des méthodes qu'elle fournit...
    Même si le mécanisme sous-jacent est similaire, implémenter une interface est différent d'un héritage simple qui est une spécialisation/généralisation.
    Hope it helps !
    Nouveau ! Il y a une vie après le java, oxygénez-vous

Discussions similaires

  1. Héritage et interfaces
    Par buzzkaido dans le forum C++
    Réponses: 10
    Dernier message: 23/10/2007, 17h02
  2. Héritage d'interface avec masquage de méthode
    Par Pongten dans le forum ASP.NET
    Réponses: 4
    Dernier message: 05/09/2007, 22h16
  3. héritage et interfaces
    Par vincs72 dans le forum Langage
    Réponses: 5
    Dernier message: 23/08/2007, 00h20
  4. [POO] héritage et interface
    Par stailer dans le forum Langage
    Réponses: 1
    Dernier message: 17/04/2007, 13h14
  5. [Héritage et Interfaces] Quelle solution choisir ?
    Par BlackWood dans le forum Langage
    Réponses: 10
    Dernier message: 14/11/2006, 11h08

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