31 votes

Pourquoi ne pouvez-vous pas réduire la visibilité d'une méthode dans une sous-classe Java?

Pourquoi le compilateur envoie-t-il un message d'erreur lorsque vous réduisez la visibilité d'une méthode tout en la surchargeant dans la sous-classe?

57voto

Joachim Sauer Points 133411

Parce que chaque instance de la sous-classe doit toujours être une instance valide de la classe de base (voir Principe de substitution de Liskov ).

Si la sous-classe a soudainement perdu une propriété de la classe de base (à savoir une méthode publique par exemple), elle ne constituerait plus un substitut valide pour la classe de base.

14voto

sepp2k Points 157757

Parce que si cela était autorisé, la situation suivante serait possible:

Classe Sous hérite de la classe Parent. Parent a une méthode publique foo, Sous fait que la méthode privée. Maintenant, le code suivant devrait compiler amende, parce que le type déclaré de l' bar est Parent:

Parent bar = new Sub();
bar.foo();

Cependant, il n'est pas clair comment cela devrait se comporter. Une possibilité serait de laisser il provoque une erreur d'exécution. Une autre serait de tout simplement le permettent, ce qui en ferait-il possible d'appeler une méthode privée de l'extérieur, juste par la coulée de la classe parent. Aucune de ces solutions de rechange sont acceptables, de sorte qu'il n'est pas permis.

1voto

z - Points 5610

Parce que les sous-types doivent être utilisables comme instances de leur supertype.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X