0
votes

Nom de la fonction correspondant mais différents arguments

étudier "craquer l'entretien de codage" en Java, à la page 51 Je suis tombé sur:

void permutation(String str){
   permutation(str,"");
}
void permutation(String str, String prefix){
  if(str.length()==0){
    System.out.println(prefix);
  } else{
    for(int i=0;i<str.length();i++){
        String rem=str.substring(0,i)+str.substring(i+1);
         permutation(rem,prefix+str.charAt(i));
    }
  }
}


5 commentaires

Est-ce peut-être ce qu'on appelle "la surcharge de la méthode"?


Ceci s'appelle surcharge. La méthode est définie par sa signature. La signature consiste en le nom de la fonction, ainsi que les types des paramètres (dans l'ordre). Le type de retour ne fait pas partie de la signature de méthode. Les détails des signatures de méthode sont définis dans JLS, §8.4.2 .


Cela ne sera pas écrasé. Ceci s'appelle Surcharge de la méthode


Ceci est surcharge, que Python ne prend pas en charge (qu'il ne peut être utile de manière utile car Python n'est pas une langue typée de manière statique). En Python, les fonctions sont des objets de première classe et lorsque vous appelez une fonction, il résout quel que soit l'objet de fonction, le nom ou la référence que vous utilisez réellement. En Java, le compilateur permet de déterminer quelle méthode réelle est en train d'être Caleld sur la base du nom et de la signature.


Remarque, une distinction importante, Python n'a pas de déclarations variables / fonctions . Java fait.


4 Réponses :


-1
votes

en Java, toute la classe est chargée avant que une méthode soit exécutée.

Cela signifie que la deuxième méthode est chargée / prête avant que la première méthode est exécutée et que la première méthode est chargée / prête avant que la seconde méthode soit exécutée.

Ceci permet d'appeler une méthode récursive et d'appeler une méthode qui sera déclarée plus tard.

En outre, la méthode est surchargée .

En Java, il est possible de créer plusieurs méthodes avec le même nom dans la même classe si les paramètres sont différents. Les méthodes seront traitées comme différentes, déoendant de l'argument transmis à la méthode.

En d'autres termes, le nom seul ne définit pas quelle méthode est appelée mais la signature , y compris les paramètres (pas la valeur de retour)


1 commentaires

Comment cela répond-il à la question?



2
votes

Comment Java va-t-il reconnaître et utiliser la première fonction de permutation?

Lorsque vous appelez la méthode, Java verra ce que vous essayez de passer. Basé sur les arguments que vous passez, il décidera de la "version" de la méthode que vous essayez d'utiliser.

Comme les autres ont dit - ceci est la surcharge de la méthode


1 commentaires

IMPORTANT: la décision est effectuée sur les types statiques , pas les types dynamique des paramètres réels.



0
votes

Contrairement à Python, en Java, ces deux déclarations vivent côte à côte - la seconde ne remplace pas le premier. En Java, la règle est à peu près que lorsque vous appelez une méthode avec plusieurs définitions (aka une méthode "surchargée"), Java recherchera celui qui correspond le mieux aux arguments que vous avez appelés et exécutez cette méthode. Donc permutation ("hi") invoque la première version et permutation ("hi", "") appelle la seconde.

La différence fondamentale ici est que, dans Python, vous pouvez imaginer l'interprète de lire les définitions une à la fois et en remplaçant sa définition globale de permutation chaque fois qu'il reçoit une nouvelle définition. En Java, vous devez y penser comme une lecture tous les les définitions de permutation à la fois et appelez le plus approprié pour une invocation donnée.

(une conséquence de cela est que Java vérifie également à la compilation de la compilation que chaque version surchargée d'une méthode est appelable: Par exemple, si vous avez écrit deux versions de permutation qui ont pris juste une chaîne Comme leur argument, le compilateur vous donnerait une erreur et ne compilerait pas du tout votre programme. Dans Python, vous obtiendrez simplement la deuxième définition.)


0 commentaires

0
votes

Expliquer ce que sont les sémantiques, nous devons examiner comment les méthodes Java sont différenciées.

en Java, une méthode est identifiée par sa signature. JLS §8.4.2 Spécifie que P>

Deux méthodes ont la même signature si elles ont le même nom et les mêmes types d'arguments. P> BlockQuote>

Il est important de noter que le type de retour d'une méthode est pas strong> partie de la signature d'une méthode. Ainsi, si on écrirait: p>

public class Test {
    public static void main(final String... args) {
        final String s = "foo";
        final Object o = s;
        print(s);
        print(o);
    }

    private static void print(final String s) {
        System.out.println("Called with String parameter");
    }

    private static void print(final Object o) {
        System.out.println("Called with Object parameter");
    }
}


0 commentaires