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 :

choix methode surdéfinie


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Par défaut choix methode surdéfinie
    voici une surdéfinition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public void methode1(int a, int b){...}
     
    public void methode1(int a, double d) {...}
    Voici un appel de methode1()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    methode1(s, i);
    s étant de type short et i de type int.

    Quelle méthode sera choisie et pourquoi ?

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2005
    Messages : 78
    Par défaut
    Bonjour,

    Aucune idée, mais un moyen simple de le vérifié...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public void methode1(int a, int b)
    {
    ...
    System.out.println("j'ai été appellé par  : public void methode1(int a, int b)");
    ...
    }
     
    public void methode1(int a, double d) 
    {
    ...
    System.out.println("j'ai été appellé par  : public void methode1(int a, double d) ");
    ...
    }
    et au moins comme ca on saura...

  3. #3
    Membre Expert
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Par défaut
    Bonjour je crois qu'il choisira
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void methode1(int a, int b){...}
    parce que tel que les type de donné sont defini te ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Primitive  |	Signification  	      Taille (en octets)  	Plage de valeurs acceptée
    ---------------------------------------------------------------------------
    byte	        Entier très court	 1	                   -128 à 127
    short	        Entier court	         2	                    -32768 à 32767
    int	        Entier	                 4	                       -2 147 483 648 à 2 147 483 647
    long	        Entier long	         8	                    -9223372036854775808 à 9223372036854775807
    float	        flottant (réel)	         4	                    -1.4*10-45 à 3.4*1038
    double	        flottant double	         8	                  4.9*10-324 à 1.7*10308
    Il choisira le premier pour ne pas consommer trop de memoire

  4. #4
    Membre expérimenté Avatar de Amine_sas
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 245
    Par défaut
    Salut,

    Il choisira la 1ere car le 1er paramètre short peut être converti en int sans perte de précision et le 2eme est déjà int.
    même pour la 2eme méthode on pourrait convertir le int en double, je pense que le compilateur optera pour la méthode qui provoque le minimum de casts.

  5. #5
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Citation Envoyé par Amine_sas Voir le message
    Salut,

    Il choisira la 1ere car le 1er paramètre short peut être converti en int sans perte de précision et le 2eme est déjà int.
    même pour la 2eme méthode on pourrait convertir le int en double, je pense que le compilateur optera pour la méthode qui provoque le minimum de casts.
    J'ai dit que les explic ci-dessus étaient incorrecte, j'ai mal lu, cette explication ci est correcte

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Par défaut
    Alors, que dire de ceci :

    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
     
    public class Testeur
    {
        public static void main(String arg [] )
        {
            byte b = 1; short s = 22; int i = 4444; long l = 88888888l; float f = 2.0f; double d = 25.0;
            afficher(s, s);
        }
     
    	public static void afficher(int a, int b)
    	{
    		System.out.println("afficher int int");
    	}
     
    	public static void afficher(short a, double b)
    	{
    		System.out.println("afficher int double");
    	}
     
     
    }
    ?

    Les deux méthodes marchent. Mais le compilateur n' a pas choisi l' une d' elle. Il dit qu' il y a ambiguité. Voici le message d' erreur renvoyé.


    C:\Java5\jdk\bin>javac Testeur.java
    Testeur.java:6: reference to afficher is ambiguous, both method afficher(int,int
    ) in Testeur and method afficher(short,double) in Testeur match
    afficher(s, s);
    ^
    1 error


    Pourquoi ne pas choisir le cas où le minimum de mémoire est utilisé ?

  7. #7
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Citation Envoyé par Nayila Voir le message
    Pourquoi ne pas choisir le cas où le minimum de mémoire est utilisé ?
    Parce que heureusement le compilo n'a pas à préférer une méthode à une autre car il ne sait pas si toi tu voulais utiliser la première ou la seconde méthode !!!

    pour lever l'ambiguité il faut que tu forces les types :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    afficher(s, (double) s);
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    afficher((int) s, (int) s);
    Il n'y a aucune considération de mémoire, les explications ci-dessus sont incorrectes. Le compilo va choisir la méthode la plus ressemblante quand c'est possible et qu'il n'y a pas d'ambiguité.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    methode1(s, i);
     
    public void methode1(int a, int b){...}
    public void methode1(int a, double d) {...}
    c'est la première méthode qui sera choisie car il n'y a qu'une seule transformation a faire (short vers int) car le second type est de type int et qu'il l'a à disposition.

    Si tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    methode1(s, (double) i);
    Il va choisir la deuxième.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Par défaut
    Citation Envoyé par natha Voir le message
    Parce que heureusement le compilo n'a pas à préférer une méthode à une autre car il ne sait pas si toi tu voulais utiliser la première ou la seconde méthode !!!

    pour lever l'ambiguité il faut que tu forces les types :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    afficher(s, (double) s);
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    afficher((int) s, (int) s);
    Il n'y a aucune considération de mémoire, les explications ci-dessus sont incorrectes. Le compilo va choisir la méthode la plus ressemblante quand c'est possible et qu'il n'y a pas d'ambiguité.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    methode1(s, i);
     
    public void methode1(int a, int b){...}
    public void methode1(int a, double d) {...}
    c'est la première méthode qui sera choisie car il n'y a qu'une seule transformation a faire (short vers int) car le second type est de type int et qu'il l'a à disposition.

    Si tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    methode1(s, (double) i);
    Il va choisir la deuxième.
    OKAY !

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

Discussions similaires

  1. choix methode surdéfinie
    Par Nayila dans le forum Langage
    Réponses: 4
    Dernier message: 30/11/2007, 08h56
  2. Choix de Methode DAO ou shell ?
    Par Jertho dans le forum VBA Access
    Réponses: 4
    Dernier message: 24/06/2007, 18h54
  3. [D6] Choix composant ou methode pour mise en page
    Par dridri86 dans le forum Composants VCL
    Réponses: 9
    Dernier message: 23/12/2006, 21h09
  4. Choix d'un langage : existe-t-il une méthode ?
    Par if_zen dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 21/04/2006, 14h35
  5. Faire Choix du fichier destination methode GET grace a JS
    Par ahage4x4 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 14/06/2005, 15h26

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