Deux méthodes Java peuvent-elles avoir la même même nom avec différents type de retour ? Le type de retour des méthodes est différent et elles sont déclarées avec le même nom de méthode.
Est-ce que c'est autorisé ?
Deux méthodes Java peuvent-elles avoir la même même nom avec différents type de retour ? Le type de retour des méthodes est différent et elles sont déclarées avec le même nom de méthode.
Est-ce que c'est autorisé ?
Si les deux méthodes ont le même type de paramètre, mais un type de retour différent, ce n'est pas possible. À partir de Spécification du langage Java, édition Java SE 8, §8.4.2. Signature de la méthode :
Deux méthodes ou constructeurs, M et N, ont la même signature s'ils ont le même nom, les mêmes paramètres de type (le cas échéant) (§8.4.4), et, après adaptation des types de paramètres formels de N aux paramètres de type de M, les mêmes types de paramètres formels.
Si les deux méthodes ont des types de paramètres différents (donc une signature différente), c'est possible. C'est ce qu'on appelle la surcharge.
Selon le JLS, vous ne pouvez pas, mais en raison d'une fonctionnalité/bogue dans le compilateur Java 6/7 (JDK d'Oracle, OpenJDK, JDK d'IBM), vous pouvez avoir différents types de retour pour la même signature de méthode si vous utilisez des génériques.
public class Main {
public static void main(String... args) {
Main.<Integer>print();
Main.<Short>print();
Main.<Byte>print();
Main.<Void>print();
}
public static <T extends Integer> int print() {
System.out.println("here - Integer");
return 0;
}
public static <T extends Short> short print() {
System.out.println("here - Short");
return 0;
}
public static <T extends Byte> byte print() {
System.out.println("here - Byte");
return 0;
}
public static <T extends Void> void print() {
System.out.println("here - Void");
}
}
Imprimés
here - Integer
here - Short
here - Byte
here - Void
Pour plus de détails, lire mon article ici
Non. C++ et Java interdisent tous deux la surcharge du type de retour d'une fonction. La raison en est que la surcharge du type de retour peut prêter à confusion (il peut être difficile pour les développeurs de prévoir quelle surcharge sera appelée). En fait, certains soutiennent que toute surcharge peut être déroutante à cet égard et la déconseillent, mais même ceux qui favorisent la surcharge semblent convenir que cette forme particulière est trop déroutante.
Vous pouvez avoir deux méthodes avec les mêmes arguments et des types de retour différents uniquement si l'une des méthodes est héritée et que les types de retour sont compatibles.
Par exemple :
public class A
{
Object foo() { return null; }
}
public class B
extends A
{
String foo() { return null; }
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.