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

Java Discussion :

Héritage, Généricité, Cast?!


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 41
    Points : 30
    Points
    30
    Par défaut Héritage, Généricité, Cast?!
    bonjour, je ss entrain d'implémenter la communication entre deux agents (dans le cadre de mon PFE : developpement d'une plateforme multi-agents). Essentiel, j'essaie de voir et de comprendre le code sources des plateforme open source déjà existées; quand j'ai essayé de comprendre le code source d'une plateforme Madkit, et j'ai trouvé ceci :

    public class Message {....}
    public class ActMessage extends Message {...}
    public class AclMessage extends ActMessage{...}
    et il ya deux méthodes : send (AgentAdress a, Message m)
    Message receive(); dans la classe Agent

    pour le moment tout est clair.
    Mais en voyant l'exemple d'utilisation ci dessous j'ai trouvé un peu d'ambiguité :
    AclMessage msg = new AclMessage(...);
    send (agent, msg);// comment (pourquoi) la méthode accepte ce type ?!!!!
    AclMessage msg1 = (AclMessage) receive();// ecq les données envoyées seeront les mêmes reçues?!!!!!!

    de plus mon idée était d'utiliser la généricité, par exemple dans send à la place de "Message m" j'ai voulu faire "? extends Message : n'importe classe qui extends de la classe Message")

    enfin j'ai rendu compte qu'il faut bien comprendre ces trois mécanismes (héritage, cast et généricité). Comment ça se passe en réalité?
    de plus est ce quelqu'un peut me dire la différence entre l'idée citée en Madkit et mon idée, qui est la meilleur?
    merci

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Tu confonds plusieurs choses...

    Lorsqu'une méthode prend en paramètre un argument de type "Message", elle acceptera toute instance d'une classe qui étend (ou implémente si c'est une interface) ce type.

    Donc, la syntaxe que tu cites en exemple ne pose aucun problème puisque l'AclMessage est un Message (par extension ou implémentation).

    Et ce sans que la signature de la méthode contienne "? extends Message".
    Cette syntaxe n'est d'ailleurs pas possible pour définir un argument de méthode : elle est réservée aux classes paramétrées.

    Pour plus d'explications, je te conseille de relire tranquillement un tutoriel expliquant la généricité.
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

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

Discussions similaires

  1. Gestion mémoire, héritage et cast
    Par Nemix dans le forum Langage
    Réponses: 9
    Dernier message: 24/01/2013, 11h50
  2. [POO] héritage et cast
    Par mikekiche dans le forum Langage
    Réponses: 8
    Dernier message: 04/08/2010, 10h11
  3. Héritage et casting en java
    Par menzlitsh dans le forum Langage
    Réponses: 3
    Dernier message: 04/07/2007, 12h23
  4. héritage et casting
    Par dinver dans le forum Langage
    Réponses: 3
    Dernier message: 04/12/2005, 23h23
  5. [DP][héritage]sous-casting dynamique
    Par Le prophete dans le forum Général Java
    Réponses: 4
    Dernier message: 20/08/2004, 11h56

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