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 :

[1.5] Ellipse et liaison dynamique


Sujet :

Langage Java

  1. #1
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut [1.5] Ellipse et liaison dynamique
    Salut,

    J'aimerais votre avis sur un bout de code assez troublant.

    Si je ne dis pas de betise, l'execution d'une methode depends du type dynamique de l'objet et non pas du type de declaration de la variable.

    Alors je ne comprends pas pourquoi ce code:

    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
    21
    22
    23
    24
    25
    public abstract class MyTest
    {   
        public abstract void toto(Object ...a);
    }
     
    class Test2 extends MyTest
    {
        public void toto(Object ...a)
        {
    	System.out.println("La une");
        }
     
        public void toto(Object a, Object b)
        {
    	System.out.println("La deux");
        }
     
        public static void main(String args[])
        {
    	Test2 m2 = new Test2();
    	MyTest m1 = m2;
    	m1.toto("A", "B");
    	m2.toto("A", "B");
        }
    }
    Produit cette sortie:

    La une
    La deux
    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  2. #2
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Oubliez ce que j'ai dit apres un peu de lecture: (http://java.sun.com/docs/books/jls/t...ml/j3TOC.html).

    Il semblerait que c'est normal, d'ailleurs ce n'est pas seulement l'ellipse qui est concernee, le meme exemple en utilisant des Objects et des Strings provoque le meme phenomene.

    Apparemment lors de la resolution d'une methode appelee ainsi:

    La methode est recherchee dans le type de declaration de var.

    Ca me perturbe un peu mais bon au moins j'ai l'explication.

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  3. #3
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 544
    Points
    1 544
    Par défaut
    bonjour,

    c'est le choix du compilo (VM), si plusieurs methodes peuvent correspondre, il doit choisir la plus adaptée selon ces critères.

    Pour le premier appel, l'object MyTest doit voir en priorité la seule méthode qui lui est déclarée. (la portée doit etre un des critère)
    Pour le second appel il doit préférer celle qui possede le meme nombre d'arguments ( critère secondaire ), du fait de leur visibilité égale

    il est vrai que a cause du typage dynamique, je n'aurais pas pensé ca.

    [edit] Grilled
    "vaste programme"

  4. #4
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Surtout que d'autres langages objets n'ont pas choisis cette facon de faire, Eiffel par exemple.

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  5. #5
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    C'est surtout que le choix de la signature de la méthode à exécuter est fait à la compilation...
    Lors de la compilation, m1.toto("A","B") ne peut correspondre qu'à la méthode de MyTest, et donc à la signature qui écrit "La une".

    J'ai déjà fait ce genre de chose en TD...

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

Discussions similaires

  1. Table lié (liaison dynamique)
    Par willytito dans le forum Access
    Réponses: 2
    Dernier message: 19/03/2007, 09h20
  2. Liaison dynamique !
    Par Franck.H dans le forum Linux
    Réponses: 2
    Dernier message: 16/08/2006, 14h25
  3. Liaison dynamique et vitesse des programmes
    Par sebzinzin dans le forum Langage
    Réponses: 2
    Dernier message: 11/04/2006, 09h51
  4. Problème de liaison dynamique...
    Par Franck.H dans le forum Linux
    Réponses: 13
    Dernier message: 24/06/2005, 18h45
  5. [xsl]simuler le mecanisme OO de "liaison dynamique"
    Par philemon_siclone dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 19/12/2003, 11h34

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