11.12. Structure des classes et des objets en Java : surcharge et remplacement de méthodes
Java, étant un langage de programmation orienté objet, offre un cadre robuste pour définir des classes et des objets. Un concept fondamental dans ce contexte est celui de méthodes, qui sont essentiellement les actions que les objets peuvent effectuer. La flexibilité d'utilisation des méthodes est augmentée par deux concepts importants : la surcharge et la substitution de méthodes. Explorons chacun de ces concepts en détail.
Surcharge de méthode
La surcharge de méthodes est une fonctionnalité qui permet à un programmeur de définir plusieurs méthodes portant le même nom au sein d'une classe, à condition qu'elles aient des listes de paramètres différentes. La surcharge est utile lorsque vous souhaitez effectuer la même opération de différentes manières en fonction des arguments passés à la méthode.
Calculatrice de classe publique {
// Surcharge avec deux paramètres
public int ajouter (int a, int b) {
renvoyer a + b ;
}
// Surcharge avec trois paramètres
public int ajouter (int a, int b, int c) {
renvoyer a + b + c ;
}
}
Dans l'exemple ci-dessus, la classe Calculator
a deux méthodes appelées add
. L’un d’eux ajoute deux nombres, tandis que l’autre en ajoute trois. Le compilateur Java distingue la méthode à appeler en fonction des arguments transmis lors de l'appel de méthode.
Remplacement de méthode
Le remplacement de méthode, en revanche, se produit lorsqu'une sous-classe redéfinit une méthode de la superclasse. La méthode substituée dans la sous-classe doit avoir la même signature, c'est-à-dire le même nom, le même type de retour et les mêmes paramètres que la méthode de la superclasse. La substitution est utilisée pour fournir une implémentation spécifique d'une méthode déjà fournie par sa classe parent.
classe Animal {
public void émetSound() {
System.out.println("L'animal fait un bruit");
}
}
la classe Chien étend Animal {
// Remplacement de la méthode émetSound
@Passer outre
public void émetSound() {
System.out.println("Le chien aboie");
}
}
Dans l'exemple ci-dessus, la classe Dog
remplace la méthode EmitSound
de la classe Animal
. Lorsqu'un objet de la classe Dog
appelle EmitSound
, la nouvelle implémentation est exécutée, pas celle de la classe Animal
.
Règles de remplacement de méthode
Certaines règles doivent être suivies pour remplacer correctement une méthode :
- La méthode de la sous-classe doit avoir la même signature que la méthode de la superclasse.
- La méthode de la sous-classe doit être au moins aussi accessible que la méthode de la superclasse.
- La méthode de la sous-classe ne peut pas lancer d'exceptions vérifiées plus larges que la méthode de la superclasse.
- Si la méthode de la superclasse renvoie un type, la méthode de la sous-classe doit renvoyer le même type ou un sous-type (covariance).
Différences entre la surcharge et l'écrasement
Bien que les deux concepts permettent l'utilisation de méthodes portant le même nom, elles sont utilisées dans des contextes différents et ont des règles différentes :
-
La
- Surcharge se produit au sein de la même classe et est utilisée pour les méthodes qui effectuent la même opération de différentes manières, avec des paramètres différents.
- Exposant se produit entre une superclasse et une sous-classe et est utilisé pour fournir une implémentation spécifique d'une méthode qui existe déjà dans la superclasse.
Mot clé super
Lorsque nous substituons une méthode, nous souhaitons parfois appeler la version de la méthode de la superclasse avant d'ajouter des fonctionnalités spécifiques à la sous-classe. Cela peut être fait en utilisant le mot-clé super
.
la classe Chat étend Animal {
@Passer outre
public void émetSound() {
super.emitSound(); // Appel de la méthode superclasse
System.out.println("Le chat miaule");
}
}
Dans cet exemple, la classe Cat
remplace la méthode Sound
, mais appelle également l'implémentation de la méthode par la classe Animal
avant d'ajouter la sienne. fonctionnalité.
Conclusion
Comprendre la surcharge et le remplacement de méthodes est essentiel pour utiliser efficacement la programmation orientée objet en Java. Ces concepts permettent aux programmeurs d'écrire du code plus flexible et réutilisable, rendant les systèmes plus faciles à maintenir et à développer. En maîtrisant la surcharge et l'écrasement, vous serez en mesure de créer des classes qui se comportent de manière polymorphe, répondant différemment aux messages courants, ce qui est un principe fondamental de l'orientation objet.