Question

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?

Était-ce utile?

La solution

Comme 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.

Autres conseils

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

Class Sub hérite de la classe Parent. Parent a une méthode publique foo , Sub rend cette méthode privée. Maintenant, le code suivant serait bien compilé, car le type déclaré de barre est Parent:

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

Cependant, on ne sait pas comment cela devrait se comporter. Une possibilité serait de le laisser provoquer une erreur d'exécution. Une autre solution serait simplement de l’autoriser, ce qui permettrait d’appeler une méthode privée de l’extérieur, en appelant simplement la classe parente. Aucune de ces alternatives n'est acceptable, donc ce n'est pas autorisé.

Parce que les sous-types doivent être utilisables en tant qu'instances de leur supertype.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top