Je ne comprends pas en quoi le remplacement diffère du masquage en Java. Quelqu'un peut-il fournir plus de détails sur la différence entre ces derniers? J'ai lu le tutoriel Java, mais l'exemple de code m'a toujours laissé perplexe.
Pour être plus clair, je comprends bien la priorité. 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 tandis que l'autre est au niveau de la classe.
En regardant le code du didacticiel 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:
La sortie de ce programme est la suivante:
Méthode de classe en animal.
La méthode d'instance dans Cat.
Pour moi, le fait que l'appel d'une méthode de classe testClassMethod()
directement à partir de la Animal
classe exécute la méthode dans la Animal
classe est assez évident, rien de spécial ici. Ensuite, ils appellent testInstanceMethod()
from une référence à myCat
, donc encore une fois assez évident que la méthode exécutée est alors celle de l'instance deCat
.
D'après ce que je vois, le masquage d'appel se comporte comme un dépassement, alors pourquoi faire cette distinction? Si j'exécute ce code en utilisant les classes ci-dessus:
Cat.testClassMethod();
J'obtiendrai:
La méthode de classe dans Cat.
Mais si je supprime le testClassMethod()
de Cat, alors j'obtiendrai:
La méthode de classe dans Animal.
Ce qui me montre que l'écriture d'une méthode statique, avec la même signature que dans le parent, dans une sous-classe fait à peu près un remplacement.
J'espère que je clarifie mes points de confusion et que quelqu'un puisse faire la lumière. Merci d'avance!