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 :

Question basique Java


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Jacobian
    Inscrit en
    Février 2008
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 425
    Par défaut Question basique Java
    Bonjour tout le monde,
    j'ai une petite question sur le langage java, ma question est formulé par l'exemple suivant:

    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
     
    public class Test {
     
    	public static void testIt(byte b) {
    		System.out.println(" byte ");
    	}
     
    	public static void testIt(short b) {
    		System.out.println(" short ");
    	}
     
    	public static void testIt(int b) {
    		System.out.println(" int ");
    	}
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		testIt(1);
    	}
     
    }
    ce programme il va affiché quoi ? et c'est quoi la logique derrière le résultat ?

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Il existe plusieurs méthodes de même nom, "testIt()." Chacune d'entre elle prend en paramètre des types différents, car une classe ne peut pas avoir plusieurs méthodes de mêmes noms et de mêmes paramètres.

    On dit que les méthodes "testIt()" sont surchargées.

    Quand on l'appelle, le compilateur choisit quelle est la bonne, en fonction du type du paramètre qui est passé.

    Ici le paramètre est 1. Il s'agit d'un littéral numérique entier, qui n'a pas de L majuscule ou minuscule qui indiquerait le type long. Un littéral numérique entier qui n'est pas long, est forcément de type int (définition Java).

    Y a-t-il une méthode testIt() qui accepte un int en paramètre ?
    Oui => tu as ta réponse.
    Non => On va chercher s'il y en a une qui accepte un type vers lequel le paramètre peut être implicitement converti.
    Pour int c'est : long, float, double, Integer, Number, Object. Dans cet ordre. long, float, double et Integer c'est dans cet order par définition Java. Number et Object, c'est parce que ce sont les ascendants de Integer, du plus proche au plus lointain.
    Toujours pas => On essaie de gérer les éllipses en repartant de int... et en réappliquant le même ordre.
    Toujours pas => Aucune méthode n'accepte le paramètre. Le programme ne compile pas.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éclairé Avatar de Jacobian
    Inscrit en
    Février 2008
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 425
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Il existe plusieurs méthodes de même nom, "testIt()." Chacune d'entre elle prend en paramètre des types différents, car une classe ne peut pas avoir plusieurs méthodes de mêmes noms et de mêmes paramètres.

    On dit que les méthodes "testIt()" sont surchargées.

    Quand on l'appelle, le compilateur choisit quelle est la bonne, en fonction du type du paramètre qui est passé.

    Ici le paramètre est 1. Il s'agit d'un littéral numérique entier, qui n'a pas de L majuscule ou minuscule qui indiquerait le type long. Un littéral numérique entier qui n'est pas long, est forcément de type int (définition Java).

    Y a-t-il une méthode testIt() qui accepte un int en paramètre ?
    Oui => tu as ta réponse.
    Non => On va chercher s'il y en a une qui accepte un type vers lequel le paramètre peut être implicitement converti.
    Pour int c'est : long, float, double, Integer, Number, Object. Dans cet ordre. long, float, double et Integer c'est dans cet order par définition Java. Number et Object, c'est parce que ce sont les ascendants de Integer, du plus proche au plus lointain.
    Toujours pas => On essaie de gérer les éllipses en repartant de int... et en réappliquant le même ordre.
    Toujours pas => Aucune méthode n'accepte le paramètre. Le programme ne compile pas.
    j'ai testé les combinaisons ton raisonnement est correcte.

    Merci.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par Jacobian Voir le message
    j'ai testé les combinaisons ton raisonnement il est correcte.
    Ben oui, je sais, je le connais pas par cœur j'ai vérifié avant -_-°.

    Au fait, j'ai oublié de préciser que, du coup, int ne pouvant pas être implicitement converti en short ou byte, les méthodes en short et byte ne sont même pas concernées.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre éclairé Avatar de Jacobian
    Inscrit en
    Février 2008
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 425
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Ben oui, je sais, je le connais pas par cœur j'ai vérifié avant -_-°.

    Au fait, j'ai oublié de préciser que, du coup, int ne pouvant pas être implicitement converti en short ou byte, les méthodes en short et byte ne sont même pas concernées.
    si si sont aussi concerné si on type l'argument:

    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
    26
    27
    28
    29
    30
    31
    32
     
    public static void testIt(byte b) {
    		System.out.println(" byte ");
    	}
     
    	public static void testIt(short b) {
    		System.out.println(" short ");
    	}
     
    	public static void testIt(int b) {
    		System.out.println(" int ");
    	}
     
    	public static void testIt(long b) {
    		System.out.println(" long ");
    	}
     
    	public static void testIt(float b) {
    		System.out.println(" float ");
    	}
     
    	public static void testIt(double b) {
    		System.out.println(" double ");
    	}
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		short x = 1;
    		testIt(x);
    	}

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Ben comme ça oui, vu qu'il ne s'agit plus d'une conversion int vers short.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. questions basiques sur java
    Par zpico dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 15/03/2011, 13h23
  2. Question Basique Gestion Erreur VBA ...
    Par Le_Phasme dans le forum Access
    Réponses: 2
    Dernier message: 11/10/2005, 13h42
  3. Question basique
    Par PatLeOuf dans le forum C++
    Réponses: 1
    Dernier message: 23/03/2005, 10h57
  4. Réponses: 5
    Dernier message: 04/03/2005, 12h14

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