2013-09-29 3 views
0

J'ai un programme court pour tester la méthode de surcharge dans Java. Voici mon code:Comment surcharger la méthode avec d'autres types de paramètres?

public static void main(String[] args) { 
    // TODO code application logic here 
    // Case 1 
    f2(5); 
    // Case 2 
    char x = 'a'; 
    f2(x); 
    // Case 3 
    byte y = 0; 
    f2(y); 
    // Case 4 
    float z = 0; 
    f2(z); 
} 

Et il y a mes méthodes:

public static void prt(String s) { 
    System.err.println(s); 
} 

public static void f2(short x) { 
    prt("f3(short)"); 
} 

public static void f2(int x) { 
    prt("f3(int)"); 
} 

public static void f2(long x) { 
    prt("f5(long)"); 
} 

public static void f2(float x) { 
    prt("f5(float)"); 
} 

ce qui est le résultat:

f3(int) 
f3(int) 
f3(short) 
f5(float) 

Je ne comprends pas comment ça fonctionne avec 2 cas et 3. Tout expliquer pour moi?

Répondre

2

L'appel de méthode dans le cas de méthodes surchargées appelle la méthode la plus spécifique en fonction des paramètres de type et du type réel que vous transmettez.

conversion d'invocation de la méthode suit le chemin suivant:

  • Identity Conversion: D'abord la méthode de correspondance exacte sera recherchée. Si trouvé, il sera invoqué. Conversion d'un type au même type
  • Élargissement de la conversion des primitives: En l'absence de méthode de correspondance exacte, la méthode est choisie en fonction de l'élargissement de la conversion de l'argument actuel au paramètre de type de format.

d'autres sont là, ne s'applique pas ici cependant. Voir JLS 5.3 for Method Invocation Conversion.

Ainsi, pour f2(x); car il n'y a pas de correspondance exacte de type char, la méthode f2(int) est invoquée, comme le type le plus spécifique auquel char peut être converti par conversion élargissement est int. Non, char à short n'est pas une conversion grandissante.

similairement, pour f2(y), il n'y a pas de correspondance exacte de type byte, la méthode f2(short) est invoquée, comme short est le type le plus spécifique que byte peut être élargie à.

Voir JLS 5.1.2 for Widening Primitive conversions:

19 conversions spécifiques sur les types primitifs sont appelés les conversions primitives élargissement:

  • byte à short, int, long, float ou double
  • short à int, long, float ou double
  • char à int, long, float ou double
+0

merci beaucoup! – Thangnv

Questions connexes