Leçons du module (2/2)
Méthodes et Surcharge
Les méthodes définissent le comportement d'un objet. Nous pouvons les voir comme des fonctions déclarées à l'intérieur d'une classe qui opèrent sur les champs d'instance de l'objet ou sur les paramètres d'entrée.
Définir une Méthode
Une méthode en Java est composée de :
- Modificateur d'accès (ex.
public,private). - Type de retour (ex.
int,String, ouvoids'il ne renvoie rien). - Nom de la méthode en
camelCase. - Paramètres entourés de parenthèses.
- Corps de la méthode entouré d'accolades.
class Person {
String name;
public Person(String name) {
this.name = name;
}
// Metodo con tipo di ritorno String
public String greet() {
return "Ciao, mi chiamo " + name;
}
}
Appeler une Méthode
Pour appeler une méthode sur un objet créé, nous utilisons la syntaxe du point .:
public class Main {
public static void main(String[] args) {
Person p = new Person("Marco");
String message = p.greet(); // Chiamata del metodo
System.out.println(message);
}
}
Surcharge des Méthodes (Method Overloading)
En Java, deux ou plusieurs méthodes au sein de la même classe peuvent avoir le même nom, à condition d'avoir une liste de paramètres différente (par le nombre, l'ordre ou le type des paramètres). Ce concept est connu sous le nom de Surcharge (Overloading).
Le compilateur décidera quelle méthode appeler en analysant les arguments passés lors de l'appel.
class Printer {
// Metodo per stampare un intero
public void printValue(int number) {
System.out.println("Intero: " + number);
}
// Metodo sovraccaricato per stampare una stringa
public void printValue(String text) {
System.out.println("Testo: " + text);
}
}
Passage des Paramètres par Valeur
En Java, tous les paramètres sont passés par valeur (pass-by-value). Cela signifie que lorsqu'un argument est passé à une méthode, Java crée une copie de la valeur de la variable et la passe à la méthode.
- Pour les types primitifs, la valeur d'origine en dehors de la méthode ne change jamais, même si elle est modifiée à l'intérieur de la méthode.
- Pour les objets/références, c'est la référence à l'objet qui est copiée. Cela signifie que, bien que nous ne puissions pas changer l'adresse pointée par l'objet d'origine, nous pouvons modifier son état interne (ex. ses champs) et les modifications seront visibles en dehors.
Limites de la Surcharge : Le Type de Retour
Il est important de souligner qu'il n'est pas possible de surcharger une méthode en se basant uniquement sur son type de retour. Par exemple, le code suivant générera une erreur de compilation :
class Example {
// ERRORE: La firma dei due metodi è considerata identica
public int getNumber() { return 42; }
public double getNumber() { return 42.0; }
}
Le compilateur a besoin de distinguer les méthodes uniquement en fonction de leurs paramètres pour décider quelle version appeler à la compilation (la surcharge est entièrement résolue au moment de la compilation).
À vous de jouer
Ajoutez à la classe Calculator une méthode public int add(int a, int b) qui renvoie la somme des deux nombres. Dans la méthode main, appelez la méthode sur l'objet calc et affectez le résultat à une variable entière.
Afficher l'indice
Déclarez la méthode sous la forme `public int add(int a, int b) { return a + b; }` et appelez-la dans le main ainsi : `int result = calc.add(5, 10);`.
Solution disponible après 3 tentatives
Surchargez la méthode add dans la classe Calculator en créant une autre méthode qui accepte deux double et renvoie leur somme.
Afficher l'indice
Écrivez `public double add(double a, double b) { return a + b; }` juste en dessous de la première méthode add.
Solution disponible après 3 tentatives
Ajoutez à la classe Calculator une méthode public int multiply(int a, int b) qui renvoie le produit des deux nombres. Dans la méthode main, appelez la méthode sur l'objet calc et affectez le résultat à une variable entière.
Afficher l'indice
Déclarez la méthode sous la forme `public int multiply(int a, int b) { return a * b; }` et appelez-la dans le main ainsi : `int result = calc.multiply(5, 10);`.
Solution disponible après 3 tentatives