Je ne comprends pas bien la différence entre l'overriding et le hiding en Java. Quelqu'un peut-il me donner plus de détails sur ces différences ? J'ai lu le Tutoriel Java mais l'exemple de code me laisse encore perplexe.
Pour être plus clair, je comprends bien la notion de surcharge. Mon problème est que je ne vois pas en quoi le masquage est différent, à l'exception du fait que l'un est au niveau de l'instance alors que l'autre est au niveau de la classe.
En regardant le code du tutoriel Java :
public class Animal {
public static void testClassMethod() {
System.out.println("Class" + " method in Animal.");
}
public void testInstanceMethod() {
System.out.println("Instance " + " method in Animal.");
}
}
Ensuite, nous avons une sous-classe Cat
:
public class Cat extends Animal {
public static void testClassMethod() {
System.out.println("The class method" + " in Cat.");
}
public void testInstanceMethod() {
System.out.println("The instance method" + " in Cat.");
}
public static void main(String[] args) {
Cat myCat = new Cat();
Animal myAnimal = myCat;
Animal.testClassMethod();
myAnimal.testInstanceMethod();
}
}
Puis ils disent :
Le résultat de ce programme est le suivant :
Méthode de classe dans Animal.
La méthode d'instance dans Cat.
Pour moi, le fait d'appeler une méthode de classe testClassMethod()
directement à partir du Animal
exécute la méthode dans Animal
La classe est assez évidente, rien de spécial ici. Ensuite, ils appellent la classe testInstanceMethod()
à partir d'une référence à myCat
Il est donc à nouveau évident que la méthode exécutée est celle de l'instance de Cat
.
D'après ce que je vois, le masquage des appels se comporte exactement comme la surcharge, alors pourquoi faire cette distinction ? Si j'exécute ce code en utilisant les classes ci-dessus :
Cat.testClassMethod();
Je vais prendre : La méthode de classe dans Cat. Mais si je retire le testClassMethod()
de Cat, alors j'aurai : La méthode de la classe dans Animal.
Ce qui me montre qu'écrire une méthode statique, avec la même signature que dans le parent, dans une sous-classe revient à faire une surcharge.
J'espère que j'ai clarifié mes points de confusion et que quelqu'un pourra m'éclairer. Merci beaucoup par avance !
0 votes
programmation.guide/java/